├── .github └── workflows │ ├── caching.yml │ └── ci.yml ├── .gitignore ├── .tx └── config ├── INSTALL-zh_CN.md ├── INSTALL.md ├── LICENCE.md ├── MANUAL.md ├── Makefile.am ├── README-zh_CN.md ├── README.md ├── autogen.sh ├── configure.ac ├── data ├── Makefile.am ├── icons │ ├── 16x16 │ │ ├── Makefile.am │ │ └── spek.png │ ├── 22x22 │ │ ├── Makefile.am │ │ └── spek.png │ ├── 24x24 │ │ ├── Makefile.am │ │ └── spek.png │ ├── 32x32 │ │ ├── Makefile.am │ │ └── spek.png │ ├── 48x48 │ │ ├── Makefile.am │ │ └── spek.png │ ├── Makefile.am │ └── scalable │ │ ├── Makefile.am │ │ └── spek.svg ├── spek-screenshot.png └── spek.desktop.in.in ├── dist ├── README.md ├── debian │ ├── changelog │ ├── compat │ ├── control │ ├── control.ci │ ├── copyright │ ├── rules │ ├── source │ │ └── format │ ├── spek.install │ ├── spek.manpages │ ├── spek.menu │ ├── spek.xpm │ └── watch ├── osx │ ├── Info.plist.in │ ├── README-zh_CN.md │ ├── README.md │ ├── Spek.icns │ ├── bundle.sh │ ├── bundle_universal.sh │ ├── close.png │ ├── cross │ │ ├── bundle.sh │ │ └── install_deps.sh │ ├── help.png │ ├── install_deps.sh │ ├── open.png │ └── save.png └── win │ ├── README-zh_CN.md │ ├── README.md │ ├── bundle.sh │ ├── close.ico │ ├── compile-rc.py │ ├── help.ico │ ├── install_deps.sh │ ├── open.ico │ ├── save.ico │ ├── spek.ico │ ├── spek.manifest │ ├── spek.rc │ ├── spek.wxs.in │ ├── wx-translation.patch │ └── wx-wxchar.patch ├── lic ├── Expat ├── GPL ├── IJG ├── LGPL ├── libpng ├── libtiff ├── regex ├── wxWindows └── zlib ├── man ├── Makefile.am └── spek.1 ├── po ├── LINGUAS ├── POTFILES.in ├── POTFILES.skip ├── bs.po ├── ca.po ├── cs.po ├── da.po ├── de.po ├── el.po ├── eo.po ├── es.po ├── fi.po ├── fr.po ├── gl.po ├── he.po ├── hu.po ├── id.po ├── it.po ├── ja.po ├── ko.po ├── lv.po ├── nb.po ├── nl.po ├── pl.po ├── pt_BR.po ├── ru.po ├── sk.po ├── spek.pot ├── sr@latin.po ├── sv.po ├── th.po ├── tr.po ├── uk.po ├── vi.po ├── zh_CN.po └── zh_TW.po ├── src ├── Makefile.am ├── spek-artwork.cc ├── spek-artwork.h ├── spek-audio.cc ├── spek-audio.h ├── spek-events.cc ├── spek-events.h ├── spek-fft.cc ├── spek-fft.h ├── spek-palette.cc ├── spek-palette.h ├── spek-pipeline.cc ├── spek-pipeline.h ├── spek-platform.cc ├── spek-platform.h ├── spek-preferences-dialog.cc ├── spek-preferences-dialog.h ├── spek-preferences.cc ├── spek-preferences.h ├── spek-ruler.cc ├── spek-ruler.h ├── spek-spectrogram.cc ├── spek-spectrogram.h ├── spek-utils.cc ├── spek-utils.h ├── spek-window.cc ├── spek-window.h └── spek.cc └── tests ├── Makefile.am ├── perf.cc ├── samples ├── 1ch-96000Hz-24bps.ape ├── 1ch-96000Hz-24bps.flac ├── 1ch-96000Hz-24bps.wv ├── 2ch-44100Hz-128cbr.mp3 ├── 2ch-44100Hz-16bps.m4a ├── 2ch-44100Hz-16bps.wav ├── 2ch-44100Hz-320cbr.mp3 ├── 2ch-44100Hz-V0.mp3 ├── 2ch-44100Hz-V2.mp3 ├── 2ch-44100Hz-q100.m4a ├── 2ch-44100Hz-q5.ogg ├── 2ch-44100Hz-std.mpc ├── 2ch-44100Hz-v1.wma ├── 2ch-44100Hz-v2.wma ├── 2ch-44100Hz.ac3 ├── 2ch-44100Hz.dts ├── 2ch-48000Hz-16bps.ape ├── 2ch-48000Hz-16bps.flac └── 2ch-48000Hz-16bps.wv ├── test-audio.cc ├── test-fft.cc ├── test-utils.cc ├── test.cc └── test.h /.github/workflows/caching.yml: -------------------------------------------------------------------------------- 1 | name: Caching 2 | run-name: Caching 3 | on: 4 | workflow_dispatch: 5 | schedule: 6 | - cron: "0 6 * * 3,6" 7 | jobs: 8 | Windows-MSYS2-MINGW64-Caching: 9 | name: Windows MSYS2/MINGW64 Caching 10 | runs-on: windows-latest 11 | defaults: 12 | run: 13 | shell: msys2 {0} 14 | steps: 15 | - name: Check out repository code 16 | uses: actions/checkout@v4 17 | - name: Setup MSYS2 18 | uses: msys2/setup-msys2@v2 19 | with: 20 | msystem: mingw64 21 | location: C:\msys2 22 | - name: Install dependencies 23 | run: | 24 | cd '${{ github.workspace }}' && ./dist/win/install_deps.sh 25 | du -sh 'C:\msys2' 26 | - name: Cache MSYS2 27 | uses: actions/cache@v4 28 | with: 29 | key: spek-x-msys2-mingw64 30 | path: C:\msys2 31 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | run-name: CI 3 | on: [push, pull_request, workflow_dispatch] 4 | env: 5 | HOMEBREW_NO_ANALYTICS: 1 6 | HOMEBREW_NO_AUTO_UPDATE: 1 7 | HOMEBREW_NO_INSTALL_CLEANUP: 1 8 | jobs: 9 | Build-Debian-x86_64: 10 | name: Build Spek-X (Debian, x86_64) 11 | runs-on: ubuntu-latest 12 | container: debian:sid 13 | steps: 14 | - name: Check out repository code 15 | uses: actions/checkout@v4 16 | - name: Install dependencies 17 | run: | 18 | apt update 19 | apt full-upgrade -y 20 | apt install -y g++ make pkg-config libtool intltool libwxgtk3.2-dev wx-common libavcodec-dev libavformat-dev 21 | - name: Compile and bundle application 22 | run: | 23 | mkdir -p ./dist/debian/spek-x/usr ./dist/debian/spek-x/DEBIAN 24 | ./autogen.sh --prefix="$(realpath ./dist/debian/spek-x/usr)" 25 | make -j2 && make install 26 | cp ./dist/debian/control.ci ./dist/debian/spek-x/DEBIAN/control 27 | dpkg-deb --build dist/debian/spek-x 28 | - name: Archive production artifacts 29 | uses: actions/upload-artifact@v4 30 | with: 31 | name: Spek-X (Debian, x86_64) 32 | path: ${{ github.workspace }}/dist/debian/spek-x.deb 33 | 34 | Build-Windows-x64: 35 | name: Build Spek-X (Windows, x64) 36 | runs-on: windows-latest 37 | defaults: 38 | run: 39 | shell: cmd 40 | steps: 41 | - name: Check out repository code 42 | uses: actions/checkout@v4 43 | - name: Get dependencies from cache 44 | uses: actions/cache/restore@v4 45 | with: 46 | key: spek-x-msys2-mingw64 47 | path: C:\msys2 48 | - name: Check whether MSYS2 is working 49 | run: | 50 | "C:\msys2\msys64\usr\bin\env.exe" MSYSTEM=MINGW64 /usr/bin/bash -lc "echo OK" 51 | - name: Compile and bundle application 52 | run: | 53 | "C:\msys2\msys64\usr\bin\env.exe" MSYSTEM=MINGW64 /usr/bin/bash -lc "cd '${{ github.workspace }}' && ./dist/win/bundle.sh" 54 | - name: Archive production artifacts 55 | uses: actions/upload-artifact@v4 56 | with: 57 | name: Spek-X (Windows, x64) 58 | path: ${{ github.workspace }}/dist/win/Spek/Spek.zip 59 | 60 | Build-macOS-Intel: 61 | name: Build Spek-X (macOS, Intel) 62 | runs-on: macos-latest 63 | steps: 64 | - name: Check out repository code 65 | uses: actions/checkout@v4 66 | - name: Install dependencies 67 | run: | 68 | eval "$(brew shellenv)" 69 | brew unlink perl 70 | cd '${{ github.workspace }}' && ARCH=x86_64 ./dist/osx/install_deps.sh 71 | - name: Compile and bundle application 72 | run: | 73 | eval "$(brew shellenv)" 74 | cd '${{ github.workspace }}' && ARCH=x86_64 ./dist/osx/bundle.sh 75 | - name: Archive production artifacts 76 | uses: actions/upload-artifact@v4 77 | with: 78 | name: Spek-X (macOS, Intel) 79 | path: ${{ github.workspace }}/dist/osx/Spek.x86_64.tgz 80 | 81 | Build-macOS-AppleSilicon: 82 | name: Build Spek-X (macOS, Apple Silicon) 83 | runs-on: macos-latest 84 | steps: 85 | - name: Check out repository code 86 | uses: actions/checkout@v4 87 | - name: Install dependencies 88 | run: | 89 | eval "$(brew shellenv)" 90 | brew unlink perl 91 | cd '${{ github.workspace }}' && ARCH=arm64 ./dist/osx/install_deps.sh 92 | - name: Compile and bundle application 93 | run: | 94 | eval "$(brew shellenv)" 95 | cd '${{ github.workspace }}' && ARCH=arm64 ./dist/osx/bundle.sh 96 | - name: Archive production artifacts 97 | uses: actions/upload-artifact@v4 98 | with: 99 | name: Spek-X (macOS, Apple Silicon) 100 | path: ${{ github.workspace }}/dist/osx/Spek.arm64.tgz 101 | 102 | Build-macOS-Universal: 103 | name: Build Spek-X (macOS, Universal) 104 | runs-on: macos-latest 105 | needs: 106 | - Build-macOS-Intel 107 | - Build-macOS-AppleSilicon 108 | steps: 109 | - name: Check out repository code 110 | uses: actions/checkout@v4 111 | - name: Download Spek-X (macOS, Intel) 112 | uses: actions/download-artifact@v4 113 | with: 114 | name: Spek-X (macOS, Intel) 115 | path: ${{ github.workspace }}/dist/osx/ 116 | - name: Download Spek-X (macOS, Apple Silicon) 117 | uses: actions/download-artifact@v4 118 | with: 119 | name: Spek-X (macOS, Apple Silicon) 120 | path: ${{ github.workspace }}/dist/osx/ 121 | - name: Bundle application 122 | run: | 123 | eval "$(brew shellenv)" 124 | cd '${{ github.workspace }}' && ./dist/osx/bundle_universal.sh merge_only 125 | - name: Archive production artifacts 126 | uses: actions/upload-artifact@v4 127 | with: 128 | name: Spek-X (macOS, Universal) 129 | path: ${{ github.workspace }}/dist/osx/Spek.tgz 130 | 131 | Unit-Test: 132 | name: Unit Tests 133 | runs-on: ubuntu-latest 134 | container: debian:sid 135 | steps: 136 | - name: Check out repository code 137 | uses: actions/checkout@v4 138 | - name: Install dependencies 139 | run: | 140 | apt update 141 | apt full-upgrade -y 142 | apt install -y g++ make pkg-config libtool intltool libwxgtk3.2-dev wx-common libavcodec-dev libavformat-dev 143 | - name: Run tests 144 | run: | 145 | ./autogen.sh && make check 146 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.a 2 | *.core 3 | *.exe 4 | *.msi 5 | *.o 6 | *.xz 7 | *.zip 8 | *~ 9 | .DS_Store 10 | .deps 11 | Makefile 12 | Makefile.in 13 | Makefile.in.in 14 | aclocal.m4 15 | autom4te.cache 16 | compile 17 | config.* 18 | configure 19 | data/spek.desktop 20 | data/spek.desktop.in 21 | depcomp 22 | dist/osx/Info.plist 23 | dist/osx/Spek.app 24 | dist/osx/Spek.dmg 25 | dist/win/Spek 26 | dist/win/spek.wxs 27 | dist/win/tests 28 | env 29 | install-sh 30 | intltool-extract.in 31 | intltool-merge.in 32 | intltool-update.in 33 | libtool 34 | ltmain.sh 35 | man/spek.1 36 | missing 37 | mkinstalldirs 38 | omf.make 39 | po/*.gmo 40 | po/.intltool-merge-cache 41 | po/POTFILES 42 | po/stamp-it 43 | src/*.stamp 44 | src/.libs 45 | src/spek 46 | stamp-h1 47 | tests/.libs 48 | tests/perf 49 | tests/samples/perf.wav 50 | tests/test 51 | web/version 52 | xmldocs.make 53 | -------------------------------------------------------------------------------- /.tx/config: -------------------------------------------------------------------------------- 1 | [spek.spek] 2 | file_filter = po/.po 3 | source_file = po/spek.pot 4 | source_lang = en 5 | 6 | [main] 7 | host = https://www.transifex.com 8 | 9 | -------------------------------------------------------------------------------- /INSTALL-zh_CN.md: -------------------------------------------------------------------------------- 1 | # 安装说明 2 | 3 | [[英文 English]](./INSTALL.md) 4 | 5 | ## Windows 系统 6 | 7 | 有两种软件压缩包可供下载:一个用于 x64 处理器的 ZIP 压缩包,和一个用于 Arm64 处理器的 ZIP 压缩包。32 位的 Windows 系统不被支持。 8 | 9 | 下载 ZIP 压缩包,在磁盘上的某处解压它,然后运行 `spek.exe`。 10 | 11 | ## macOS 系统 12 | 13 | 有两种软件压缩包可供下载: 一个用于 Intel 处理器的 TGZ 压缩包,和一个用于 Apple Silicon 的 TGZ 压缩包。Spek 需要 macOS 10.5+。 14 | 15 | 下载并解压 ZIP 压缩包,然后将 Spek 图标拖拽至“应用程序 (Applications)”。 16 | 17 | ## Linux 和其他类 Unix 系统 18 | 19 | ### 二进制软件包 20 | 21 | Spek-X 22 | * Debian (deb-multimedia): [spek-x](https://deb-multimedia.org/pool/main/s/spek-x-dmo/), 清华镜像: [spek-x](https://mirrors.tuna.tsinghua.edu.cn/debian-multimedia/pool/main/s/spek-x-dmo/) 23 | 24 | 原 Spek (已经过时) 25 | * Arch: [spek](https://aur.archlinux.org/packages/spek/) and 26 | [spek-git](https://aur.archlinux.org/packages/spek-git/) 27 | * Debian: [spek](https://packages.debian.org/search?keywords=spek) 28 | * Fedora: [RPMFusion package](https://bugzilla.rpmfusion.org/show_bug.cgi?id=1718) 29 | * FreeBSD: [audio/spek](https://www.freshports.org/audio/spek/) 30 | * Gentoo: [media-sound/spek](https://packages.gentoo.org/packages/media-sound/spek) 31 | * Ubuntu: [spek](http://packages.ubuntu.com/search?keywords=spek) 32 | 33 | ### 从 git 仓库构建 34 | 35 | git clone https://github.com/MikeWang000000/spek-X.git 36 | cd spek-X 37 | ./autogen.sh 38 | make 39 | 40 | 您需要 wxWidgets 和 FFmpeg 以完成构建。在 Debian/Ubuntu 上,您还需要以下开发用软件包:`libwxgtk3.0-dev`,`wx-common`,`libavcodec-dev` 和 41 | `libavformat-dev`。 42 | 43 | 您可以使用以下命令启动 Spek: 44 | 45 | src/spek 46 | 47 | 或者安装它: 48 | 49 | sudo make install 50 | 51 | -------------------------------------------------------------------------------- /INSTALL.md: -------------------------------------------------------------------------------- 1 | # Installation instructions 2 | 3 | [[简体中文 Simplified Chinese]](./INSTALL-zh_CN.md) 4 | 5 | ## Windows 6 | 7 | Download section offers two packages: a ZIP archive for x64 processors and a 8 | ZIP archive for Arm64 processors. 32-bit Windows is not supported. 9 | 10 | Download the ZIP archive, unpack it somewhere on your disk and run `spek.exe`. 11 | 12 | ## macOS 13 | 14 | Download section offers two packages: a TGZ archive for Intel processors and a 15 | TGZ archive for Apple Silicon. Spek requires macOS 10.5+. 16 | 17 | Download and unpack the TGZ archive, then drag the Spek icon to Applications. 18 | 19 | ## Linux and other Unix-like systems 20 | 21 | ### Binary packages 22 | 23 | Spek-X 24 | * Debian (deb-multimedia): [spek-x](https://deb-multimedia.org/pool/main/s/spek-x-dmo/), Tsinghua mirror: [spek-x](https://mirrors.tuna.tsinghua.edu.cn/debian-multimedia/pool/main/s/spek-x-dmo/) 25 | 26 | Original Spek (Outdated) 27 | * Arch: [spek](https://aur.archlinux.org/packages/spek/) and 28 | [spek-git](https://aur.archlinux.org/packages/spek-git/) 29 | * Debian: [spek](https://packages.debian.org/search?keywords=spek) 30 | * Fedora: [RPMFusion package](https://bugzilla.rpmfusion.org/show_bug.cgi?id=1718) 31 | * FreeBSD: [audio/spek](https://www.freshports.org/audio/spek/) 32 | * Gentoo: [media-sound/spek](https://packages.gentoo.org/packages/media-sound/spek) 33 | * Ubuntu: [spek](http://packages.ubuntu.com/search?keywords=spek) 34 | 35 | ### Building from the git repository 36 | 37 | git clone https://github.com/MikeWang000000/spek-X.git 38 | cd spek-X 39 | ./autogen.sh 40 | make 41 | 42 | To build you will need wxWidgets and FFmpeg packages. On Debian/Ubuntu you also 43 | need development packages: `libwxgtk3.0-dev`, `wx-common`, `libavcodec-dev` and 44 | `libavformat-dev`. 45 | 46 | To start Spek, run: 47 | 48 | src/spek 49 | 50 | Or install it with: 51 | 52 | sudo make install 53 | 54 | -------------------------------------------------------------------------------- /LICENCE.md: -------------------------------------------------------------------------------- 1 | # Spek Licence 2 | 3 | Spek is licenced under the GNU GPLv3, full licence text can be found under 4 | lic/GPL or on the [GNU website](https://www.gnu.org/licenses/gpl-3.0.html). 5 | 6 | ## Authors 7 | 8 | Maintainer: 9 | 10 | * Alexander Kojevnikov () 11 | 12 | Contributors: 13 | 14 | * Andreas Cadhalpun 15 | * Colin Watson 16 | * Daniel Hams 17 | * Fabian Deutsch 18 | * Jonathan Gonzalez V 19 | * Simon Ruderich 20 | * Stefan Kost 21 | * Thibault North 22 | 23 | Translators: 24 | 25 | * Adolfo Jayme Barrientos 26 | * Aleksandar Todorovic 27 | * Antón Méixome 28 | * Florent Thoumie 29 | * Giuseppe D. Barbagallo 30 | * Huang Shibing 31 | * Jonathan Gonzalez V 32 | * Olga Vasylevska 33 | * Patrik Škulavík 34 | * Pavel Fric 35 | * Philipp Defner 36 | * Piotr Drąg 37 | * Ryan Smith 38 | * Tero Talvio 39 | * Tiago Rinaldi 40 | * Toms Zvīnis 41 | * Vincent A 42 | * Wasilis Mandratzis 43 | * Wouter Bolsterlee 44 | * Many more (let me know if you translated Spek and want your full name 45 | listed here) 46 | 47 | Artist: 48 | 49 | * Olga Vasylevska 50 | 51 | ## Binary packages 52 | 53 | Official binary packages for Windows and OS X in addition to Spek include the 54 | following components: 55 | 56 | * [wxWidgets](http://www.wxwidgets.org/) is distributed under wxWindows 3.1 (see 57 | lic/wxWindows). 58 | 59 | * [FFmpeg](http://ffmpeg.org/) is distributed under GNU GPL (see lic/GPL). 60 | 61 | * [pthreads-win32](http://sources.redhat.com/pthreads-win32/) is distributed 62 | under GNU LGPL (see lic/LGPL). 63 | 64 | * [libjpeg](http://www.ijg.org/) is distributed under the IJG licence (see 65 | lic/IJG). 66 | 67 | * [libpng](http://www.libpng.org/pub/png/libpng.html) is distributed under the 68 | libpng licence (see lic/libpng). 69 | 70 | * The regex library used by wxWidgets is (c) 1998, 1999 Henry Spencer (see 71 | lic/regex). 72 | 73 | * [libtiff](http://www.remotesensing.org/libtiff/) is distributed under a 74 | BSD-like licence (see lic/libtiff). 75 | 76 | * [expat](http://expat.sourceforge.net/) is distributed under the Expat licence 77 | (see lic/Expat). 78 | 79 | * [zlib](http://www.zlib.net/) is distributed under the zlib licence (see 80 | lic/zlib). 81 | 82 | * Spek is bundled with toolbar icons from the 83 | [Dropline Neu!](http://art.gnome.org/themes/icon) icon theme. The icons are 84 | (c) Silvestre Herrera, distributed under GNU GPL (see lic/GPL). 85 | -------------------------------------------------------------------------------- /MANUAL.md: -------------------------------------------------------------------------------- 1 | # SPEK-X(1) User's Guide | Version 0.9.4 2 | 3 | ## NAME 4 | 5 | Spek-X - Acoustic Spectrum Analyser 6 | 7 | ## SYNOPSIS 8 | 9 | `spek` [*OPTION* *...*] \[*FILE*] \[*PNG*] \[*WIDTH*] \[*HEIGHT*] 10 | 11 | ## DESCRIPTION 12 | 13 | *Spek-X* generates a spectrogram for the input audio file. 14 | 15 | ## ARGUMENTS 16 | 17 | `FILE` 18 | : Audio file to be analyzed. 19 | 20 | `PNG` 21 | : Write spectrogram to this PNG file then exit. 22 | 23 | `WIDTH` 24 | : Initial width of the spectrum in pixels. 25 | 26 | `HEIGHT` 27 | : Initial height of the spectrum in pixels. 28 | 29 | ## OPTIONS 30 | 31 | `-h`, `--help` 32 | : Output the help message then quit. 33 | 34 | `-V`, `--version` 35 | : Output version information then quit. 36 | 37 | ## KEYBINDINGS 38 | 39 | ### Notes 40 | 41 | On macOS use the Command key instead of Ctrl. 42 | 43 | ### Menu 44 | 45 | `Ctrl-O` 46 | : Open a new file. 47 | 48 | `Ctrl-S` 49 | : Save the spectrogram as an image file. 50 | 51 | `Ctrl-E` 52 | : Show the preferences dialog. 53 | 54 | `F1` 55 | : Open online manual in the browser. 56 | 57 | `Shift-F1` 58 | : Show the about dialog. 59 | 60 | ### Spectrogram 61 | 62 | `c`, `C` 63 | : Change the audio channel. 64 | 65 | `f`, `F` 66 | : Change the DFT window function. 67 | 68 | `l`, `L` 69 | : Change the lower limit of the dynamic range in dBFS. 70 | 71 | `p`, `P` 72 | : Change the palette. 73 | 74 | `s`, `S` 75 | : Change the audio stream. 76 | 77 | `u`, `U` 78 | : Change the upper limit of the dynamic range in dBFS. 79 | 80 | `w`, `W` 81 | : Change the DFT window size. 82 | 83 | ## FILES 84 | 85 | *~/.config/spek/preferences* 86 | : The configuration file for *Spek-X*, stored in a simple INI format. 87 | 88 | ## AUTHORS 89 | 90 | Alexander Kojevnikov . Other contributors are listed 91 | in the LICENCE.md file distributed with the source code. 92 | 93 | ## DISTRIBUTION 94 | 95 | The latest version of *Spek-X* may be downloaded from . 96 | -------------------------------------------------------------------------------- /Makefile.am: -------------------------------------------------------------------------------- 1 | SUBDIRS = \ 2 | data \ 3 | man \ 4 | po \ 5 | src \ 6 | tests 7 | 8 | EXTRA_DIST = \ 9 | INSTALL.md \ 10 | LICENCE.md \ 11 | MANUAL.md \ 12 | README.md \ 13 | intltool-extract.in \ 14 | intltool-merge.in \ 15 | intltool-update.in \ 16 | lic/Expat \ 17 | lic/GPL \ 18 | lic/IJG \ 19 | lic/LGPL \ 20 | lic/libpng \ 21 | lic/libtiff \ 22 | lic/regex \ 23 | lic/wxWindows \ 24 | lic/zlib \ 25 | tests/samples 26 | 27 | DISTCLEANFILES = \ 28 | intltool-extract \ 29 | intltool-merge \ 30 | intltool-update 31 | -------------------------------------------------------------------------------- /README-zh_CN.md: -------------------------------------------------------------------------------- 1 | # Spek-X 2 | 3 | [[英文 English]](./README.md) 4 | 5 | Spek-X (IPA: /spɛks/) 是 [Spek-alternative](https://github.com/withmorten/spek-alternative) 的一个 fork 项目,它最初源自 [Spek](https://github.com/alexkay/spek)。 6 | 7 | Spek 是一个用 C 和 C++ 编写的声学频谱分析器。它使用 FFmpeg 库进行音频解码,并使用 wxWidgets 构建图形用户界面。 8 | 9 | Spek 可用于 *BSD、GNU/Linux、Windows 和 macOS. 10 | 11 | 在 Spek 的网站上获取更多相关信息: 12 | 13 | 14 | 15 | ## Spek-X 0.9.4 - 2025/2/6 16 | 17 | ### Sources / Packages 18 | 19 | Category | Download link 20 | -------------------------------------|---------------- 21 | 源代码包 | [v0.9.4.tar.gz](https://github.com/MikeWang000000/spek-X/archive/v0.9.4.tar.gz) 22 | Windows (x64) | [spek-x-0.9.4-windows-x86_64.zip](https://github.com/MikeWang000000/spek-X/releases/download/v0.9.4/spek-x-0.9.4-windows-x86_64.zip) 23 | Windows (Arm64) | [spek-x-0.9.4-windows-aarch64.zip](https://github.com/MikeWang000000/spek-X/releases/download/v0.9.4/spek-x-0.9.4-windows-aarch64.zip) 24 | macOS (Universal) | [spek-x-0.9.4-macos-universal.tgz](https://github.com/MikeWang000000/spek-X/releases/download/v0.9.4/spek-x-0.9.4-macos-universal.tgz) 25 | Debian 软件包 (deb-multimedia.org) | [spek-x-dmo/](https://deb-multimedia.org/pool/main/s/spek-x-dmo/) 26 | 27 | ### 新增功能和改进 28 | 29 | Spek-X 0.9.4 更新: 30 | * FFmpeg 更新至 7.1。 31 | * 替换了 FFmpeg 不推荐的 API。 32 | * macOS 程序现在通过 Universal Binary 的形式发布。 33 | * Windows Arm64 程序现在编译启用了 FFmpeg 的汇编代码优化。 34 | 35 | Spek-X 0.9.3 更新: 36 | * FFmpeg 更新至 6.0。 37 | * 支持 32-bit FLAC 音频。 38 | 39 | Spek-X 0.9.2 更新: 40 | * 支持切换声道。 41 | * 移除了 “检查更新” 功能。 42 | * 修复了潜在的内存泄漏。 43 | 44 | Spek-X 0.9.1 更新: 45 | * 修复了 m4a 和 ogg 的解码问题。 46 | * 修复了一些崩溃问题。 47 | 48 | Spek-X 0.9.0 更新(自 0.8.2 以来): 49 | * 适用于 Apple Silicon 的程序现在可用了。 50 | * 适用于 Windows Arm64 的程序现在可用了。 51 | * FFmpeg 更新至 5.0+ 52 | * wxWidgets 更新至 3.0+ 53 | * 新增用于保存频谱图的命令行支持。 54 | * 新增高 DPI 屏幕支持,修复文字显示不全问题。 55 | * 新增 Windows MSYS2 的构建方法。 56 | * Windows 上现在使用单一 exe 文件。 57 | * 优化了简体中文、繁体中文和法语的翻译。 58 | * 抑制了 wxWidgets 的警告弹窗。 59 | * 优化了 Linux 上的文件关联。 60 | * 修复了一些导致崩溃的错误。 61 | 62 | ### 构建指南 63 | 64 | [Windows](./dist/win/README-zh_CN.md) | [macOS](./dist/osx/README-zh_CN.md) | [Linux 和其他类 Unix 系统](./INSTALL-zh_CN.md#Linux-和其他类-Unix-系统) 65 | 66 | ### 依赖 67 | 68 | * wxWidgets >= 3.0 69 | * FFmpeg >= 5.0 70 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Spek-X 2 | 3 | [![CI](https://github.com/MikeWang000000/spek-X/actions/workflows/ci.yml/badge.svg?branch=main&event=push)](https://github.com/MikeWang000000/spek-X/actions/workflows/ci.yml) 4 | 5 | [[简体中文 Simplified Chinese]](./README-zh_CN.md) 6 | 7 | Spek-X (IPA: /spɛks/) is a fork of [Spek-alternative](https://github.com/withmorten/spek-alternative), which is originally derived from [Spek](https://github.com/alexkay/spek). 8 | 9 | Spek is an acoustic spectrum analyser written in C and C++. It uses FFmpeg 10 | libraries for audio decoding and wxWidgets for the GUI. 11 | 12 | Spek is available on *BSD, GNU/Linux, Windows and macOS. 13 | 14 | Find out more about Spek on its website: 15 | 16 | 17 | 18 | ## Spek-X 0.9.4 - 2025/2/6 19 | 20 | ### Sources / Packages 21 | 22 | Category | Download link 23 | -------------------------------------|---------------- 24 | Source tarball | [v0.9.4.tar.gz](https://github.com/MikeWang000000/spek-X/archive/v0.9.4.tar.gz) 25 | Windows (x64) | [spek-x-0.9.4-windows-x86_64.zip](https://github.com/MikeWang000000/spek-X/releases/download/v0.9.4/spek-x-0.9.4-windows-x86_64.zip) 26 | Windows (Arm64) | [spek-x-0.9.4-windows-aarch64.zip](https://github.com/MikeWang000000/spek-X/releases/download/v0.9.4/spek-x-0.9.4-windows-aarch64.zip) 27 | macOS (Universal) | [spek-x-0.9.4-macos-universal.tgz](https://github.com/MikeWang000000/spek-X/releases/download/v0.9.4/spek-x-0.9.4-macos-universal.tgz) 28 | Debian packages (deb-multimedia.org) | [spek-x-dmo/](https://deb-multimedia.org/pool/main/s/spek-x-dmo/) 29 | 30 | ### New Features And Enhancements 31 | 32 | Spek-X 0.9.4 Updates: 33 | * Upgrade to FFmpeg 7.1. 34 | * Replace deprecated FFmpeg APIs. 35 | * macOS version is now distributed as a Universal Binary. 36 | * Windows Arm64 version is now compiled with FFmpeg assembly optimizations. 37 | 38 | Spek-X 0.9.3 Updates: 39 | * Upgrade to FFmpeg 6.0. 40 | * Add support for 32-bit FLAC audio. 41 | 42 | Spek-X 0.9.2 Updates: 43 | * Support switching between audio channels. 44 | * Remove 'check for updates' feature. 45 | * Fix possible memory leaks. 46 | 47 | Spek-X 0.9.1 Updates: 48 | * Fix m4a and ogg decoding problems. 49 | * Fix crashes. 50 | 51 | Spek-X 0.9.0 Updates, since 0.8.2: 52 | * Apple Silicon binary is available now. 53 | * Windows Arm64 binary is available now. 54 | * FFmpeg is updated to 5.0+ 55 | * wxWidgets is updated to 3.0+ 56 | * Add Command line support for saving spectrograms. 57 | * Add high-DPI support, fixing clipped text issues. 58 | * Add Windows MSYS2 build methods. 59 | * Single exe file for Windows now. 60 | * Improved translations in Simplified Chinese, Traditional Chinese and French. 61 | * Suppress wxWidgets warning pop-ups. 62 | * Improve file associations on Linux. 63 | * Crash fixes. 64 | 65 | ### Build Instructions 66 | 67 | [Windows](./dist/win/README.md) | [macOS](./dist/osx/README.md) | [Linux and other Unix-like systems](./INSTALL.md#building-from-the-git-repository) 68 | 69 | ### Dependencies 70 | 71 | * wxWidgets >= 3.0 72 | * FFmpeg >= 5.0 73 | -------------------------------------------------------------------------------- /autogen.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Run this to generate all the initial makefiles, etc. 3 | 4 | test -n "$srcdir" || srcdir=$(dirname "$0") 5 | test -n "$srcdir" || srcdir=. 6 | ( 7 | cd "$srcdir" && 8 | touch config.rpath && 9 | AUTOPOINT='intltoolize --automake --copy' autoreconf -fiv 10 | ) || exit 11 | test -n "$NOCONFIGURE" || "$srcdir/configure" "$@" -------------------------------------------------------------------------------- /configure.ac: -------------------------------------------------------------------------------- 1 | AC_INIT([Spek-X],[0.9.4]) 2 | AC_CONFIG_SRCDIR([src/spek.cc]) 3 | AC_CONFIG_HEADERS([config.h]) 4 | AM_INIT_AUTOMAKE([1.11.1 foreign no-dist-gzip dist-xz serial-tests]) 5 | AM_SILENT_RULES([yes]) 6 | 7 | AC_LANG([C++]) 8 | AC_PROG_CXX 9 | CXXFLAGS="$CXXFLAGS -O2 -std=gnu++11 -Wall -Wextra" 10 | AC_PROG_CXXCPP 11 | AC_PROG_LIBTOOL 12 | AC_PROG_RANLIB 13 | AC_PROG_INSTALL 14 | IT_PROG_INTLTOOL([0.40.0]) 15 | 16 | AC_CANONICAL_HOST 17 | AC_MSG_CHECKING([the OS]) 18 | AS_CASE([$host], 19 | [*-*-mingw*], [ 20 | os="WIN" 21 | AC_DEFINE([OS_WIN], [1], [Windows]) 22 | ], 23 | [*-*-darwin*], [ 24 | os="OSX" 25 | AC_DEFINE([OS_OSX], [1], [OS X]) 26 | ], 27 | [*], [ 28 | os="UNIX" 29 | AC_DEFINE([OS_UNIX], [1], [Unix]) 30 | ] 31 | ) 32 | AC_MSG_RESULT([$os]) 33 | 34 | AC_CHECK_PROG(HAVE_VALGRIND, valgrind, yes, no) 35 | AC_ARG_ENABLE( 36 | [valgrind], 37 | AS_HELP_STRING([--enable-valgrind], [Run tests under valgrind]), 38 | [use_valgrind=$enableval], 39 | [use_valgrind=auto] 40 | ) 41 | AS_IF( 42 | [test "x$use_valgrind" = xyes -a "x$HAVE_VALGRIND" = xno], [AC_MSG_ERROR([Valgrind not found])], 43 | [AM_CONDITIONAL([USE_VALGRIND], [test "x$use_valgrind" != xno -a x$HAVE_VALGRIND = xyes])] 44 | ) 45 | AM_COND_IF([USE_VALGRIND], [use_valgrind=yes], [use_valgrind=no]) 46 | 47 | AC_CHECK_LIB(m, log10) 48 | 49 | PKG_CHECK_MODULES(AVFORMAT, [libavformat >= 59.27.100], [ 50 | AC_SUBST([AVFORMAT_CFLAGS]) 51 | AC_SUBST([AVFORMAT_LIBS]) 52 | ]) 53 | PKG_CHECK_MODULES(AVCODEC, [libavcodec >= 59.37.100], [ 54 | AC_SUBST([AVCODEC_CFLAGS]) 55 | AC_SUBST([AVCODEC_LIBS]) 56 | ]) 57 | PKG_CHECK_MODULES(AVUTIL, [libavutil >= 57.28.100], [ 58 | AC_SUBST([AVUTIL_CFLAGS]) 59 | AC_SUBST([AVUTIL_LIBS]) 60 | ]) 61 | 62 | CXXFLAGS="$CXXFLAGS $AVFORMAT_CFLAGS $AVCODEC_CFLAGS $AVUTIL_CFLAGS" 63 | LDFLAGS="$LDFLAGS $AVFORMAT_LIBS $AVCODEC_LIBS $AVUTIL_LIBS" 64 | if test "$os" = OSX; then 65 | LDFLAGS="$LDFLAGS -framework Cocoa" 66 | fi 67 | 68 | AM_OPTIONS_WXCONFIG 69 | reqwx=3.0.0 70 | AM_PATH_WXCONFIG($reqwx, wx=1) 71 | if test "$wx" != 1; then 72 | AC_MSG_ERROR([ 73 | wxWidgets must be installed on your system. 74 | 75 | Please check that wx-config is in path, the directory 76 | where wxWidgets libraries are installed (returned by 77 | 'wx-config --libs' or 'wx-config --static --libs' command) 78 | is in LD_LIBRARY_PATH or equivalent variable and 79 | wxWidgets version is $reqwx or above. 80 | ]) 81 | fi 82 | 83 | GETTEXT_PACKAGE=spek 84 | AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["$GETTEXT_PACKAGE"], [Gettext Package]) 85 | AC_SUBST(GETTEXT_PACKAGE) 86 | AM_GNU_GETTEXT_VERSION([0.18.1]) 87 | AM_PO_SUBDIRS 88 | 89 | AC_CONFIG_FILES([ 90 | Makefile 91 | data/spek.desktop.in 92 | data/Makefile 93 | data/icons/Makefile 94 | data/icons/16x16/Makefile 95 | data/icons/22x22/Makefile 96 | data/icons/24x24/Makefile 97 | data/icons/32x32/Makefile 98 | data/icons/48x48/Makefile 99 | data/icons/scalable/Makefile 100 | dist/osx/Info.plist 101 | dist/win/spek.wxs 102 | man/Makefile 103 | po/Makefile.in 104 | src/Makefile 105 | tests/Makefile 106 | ]) 107 | AC_OUTPUT 108 | 109 | cat <" | sort -u`. 15 | * Sync the list of authors with the About dialogue. 16 | * Update the copyright year in the About dialogue along with all the .po files. 17 | * Update news in README.md. 18 | * Update the website and debian/control's description with the new features. 19 | * Update the manpage, don't forget the release date. Run `make man`. 20 | * Update sshots if there are user-visible changes. 21 | * Update INSTALL.md with the new version number and instructions. 22 | * Update copyright year of touched code. 23 | * Make sure `make distcheck` doesn't return errors. 24 | * Prepare binaries for OSX and WIN, see README files in dist/*. 25 | * If anything has been changed, commit and re-make the tarball. 26 | * Update web/index.html: bump version numbers, binary sizes and news. 27 | * Write the blog post, link from web/index.html, don't publish yet. 28 | * Upload the tarball + OSX and WIN binaries. 29 | * `git tag -a X.Y.Z`. 30 | * Upload the website using `make upload`. 31 | * Publish the blog post. 32 | * Send an announcement to the LAA list. 33 | * Update the forum thread on what. 34 | * Update FreeBSD and Debian ports. 35 | -------------------------------------------------------------------------------- /dist/debian/changelog: -------------------------------------------------------------------------------- 1 | spek-x (0.9.4-1) unstable; urgency=low 2 | 3 | * Replace deprecated FFmpeg APIs 4 | * Fix GCC 14 compilation warnings 5 | 6 | -- MikeWang000000 Thu, 06 Feb 2025 04:07:29 +0800 7 | 8 | spek-x (0.9.2-1) unstable; urgency=low 9 | 10 | * Support switching between audio channels. 11 | * Remove 'check for updates' feature. 12 | * Fix possible memory leaks. 13 | 14 | -- MikeWang000000 Fri, 27 Jan 2023 02:20:36 +0800 15 | 16 | spek-x (0.9.1-1) unstable; urgency=low 17 | 18 | * Fix m4a and ogg decoding problems. 19 | * Fix crashes. 20 | 21 | -- MikeWang000000 Thu, 26 Jan 2023 00:01:11 +0800 22 | 23 | spek-x (0.9.0-1) unstable; urgency=low 24 | 25 | * Forked from Spek-alternative. 26 | 27 | -- MikeWang000000 Sun, 10 Jul 2022 20:35:51 +0800 28 | -------------------------------------------------------------------------------- /dist/debian/compat: -------------------------------------------------------------------------------- 1 | 9 2 | -------------------------------------------------------------------------------- /dist/debian/control: -------------------------------------------------------------------------------- 1 | Source: spek-x 2 | Section: sound 3 | Priority: optional 4 | Maintainer: MikeWang000000 5 | Build-Depends: debhelper (>= 9), 6 | autotools-dev, 7 | pkg-config, 8 | intltool (>= 0.35), 9 | libavcodec-dev (>= 7:5.0.1), 10 | libavformat-dev (>= 7:5.0.1), 11 | libavutil-dev (>= 7:5.0.1), 12 | libwxgtk3.2-dev, 13 | wx-common 14 | Standards-Version: 3.9.6 15 | Homepage: https://github.com/MikeWang000000/spek-X 16 | 17 | Package: spek-x 18 | Architecture: any 19 | Depends: ${shlibs:Depends}, 20 | ${misc:Depends} 21 | Description: acoustic spectrum analyser 22 | Spek helps to analyse your audio files by showing their spectrogram. 23 | It supports all popular lossy and lossless audio file formats. 24 | . 25 | Features: 26 | . 27 | * Ultra-fast signal processing, uses multiple threads to further 28 | speed up the analysis 29 | * Shows the codec name and the audio signal parameters 30 | * Can save the spectrogram as an image file 31 | * Drag-and-drop support; associates with common audio file formats 32 | * Auto-fitting time, frequency and spectral density rulers 33 | * Adjustable spectral density range 34 | -------------------------------------------------------------------------------- /dist/debian/control.ci: -------------------------------------------------------------------------------- 1 | Package: spek-x 2 | Version: 0.0-testing 3 | Section: sound 4 | Priority: optional 5 | Maintainer: MikeWang000000 6 | Homepage: https://github.com/MikeWang000000/spek-X 7 | Architecture: amd64 8 | Depends: libavcodec61, libavformat61, libavutil59, libc6, libgcc-s1, libstdc++6, libwxbase3.2-1t64, libwxbase3.2-1t64 9 | Description: Spek-X helps to analyse your audio files by showing their spectrogram. 10 | -------------------------------------------------------------------------------- /dist/debian/copyright: -------------------------------------------------------------------------------- 1 | This work was packaged for Debian by: 2 | 3 | Alexander Kojevnikov on Mon, 14 Mar 2011 21:05:52 +0800 4 | 5 | It was downloaded from: 6 | 7 | http://spek.cc/ 8 | 9 | Upstream Author: 10 | 11 | Alexander Kojevnikov 12 | 13 | Copyright: 14 | 15 | For everything not noted below: 16 | Copyright (C) 2010-2013 Alexander Kojevnikov 17 | 18 | For src/spek-pipeline.c: 19 | Copyright (C) 2010-2012 Alexander Kojevnikov 20 | Copyright (C) 2007-2009 Sebastian Dröge 21 | Copyright (C) 2006 Stefan Kost 22 | Copyright (C) 1999 Erik Walthinsen 23 | 24 | License: 25 | 26 | This program is free software: you can redistribute it and/or modify 27 | it under the terms of the GNU General Public License as published by 28 | the Free Software Foundation, either version 3 of the License, or 29 | (at your option) any later version. 30 | 31 | This package is distributed in the hope that it will be useful, 32 | but WITHOUT ANY WARRANTY; without even the implied warranty of 33 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 34 | GNU General Public License for more details. 35 | 36 | You should have received a copy of the GNU General Public License 37 | along with this program. If not, see . 38 | 39 | On Debian systems, the complete text of the GNU General 40 | Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". 41 | 42 | The Debian packaging is: 43 | 44 | Copyright (C) 2011-2012 Alexander Kojevnikov 45 | 46 | and is licensed under the GPL version 3 or any later version, see above. 47 | 48 | -------------------------------------------------------------------------------- /dist/debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | 3 | export V=1 4 | 5 | %: 6 | dh $@ 7 | -------------------------------------------------------------------------------- /dist/debian/source/format: -------------------------------------------------------------------------------- 1 | 3.0 (quilt) 2 | -------------------------------------------------------------------------------- /dist/debian/spek.install: -------------------------------------------------------------------------------- 1 | debian/spek.xpm usr/share/pixmaps 2 | -------------------------------------------------------------------------------- /dist/debian/spek.manpages: -------------------------------------------------------------------------------- 1 | man/spek.1 2 | -------------------------------------------------------------------------------- /dist/debian/spek.menu: -------------------------------------------------------------------------------- 1 | ?package(spek):\ 2 | needs="X11"\ 3 | section="Applications/Sound"\ 4 | title="Spek"\ 5 | longtitle="Spectrum analyser"\ 6 | icon="/usr/share/pixmaps/spek.xpm"\ 7 | command="/usr/bin/spek" 8 | -------------------------------------------------------------------------------- /dist/debian/watch: -------------------------------------------------------------------------------- 1 | version=3 2 | http://code.google.com/p/spek/downloads/list \ 3 | .*/spek-([0-9.]+)\.tar\.xz 4 | -------------------------------------------------------------------------------- /dist/osx/Info.plist.in: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | Spek 9 | CFBundleGetInfoString 10 | Spek-X @VERSION@ 11 | CFBundleIconFile 12 | Spek.icns 13 | CFBundleIdentifier 14 | org.spek-x-project 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | @VERSION@ 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | @VERSION@ 25 | NSPrincipalClass 26 | NSApplication 27 | NSHumanReadableCopyright 28 | Copyright (c) 2010-2025 Alexander Kojevnikov and contributors 29 | LSMinimumSystemVersion 30 | 10.10 31 | CFBundleDocumentTypes 32 | 33 | 34 | CFBundleTypeIconFiles 35 | 36 | Spek.icns 37 | 38 | CFBundleTypeName 39 | Spek File 40 | CFBundleTypeRole 41 | Viewer 42 | LSHandlerRank 43 | Alternate 44 | LSItemContentTypes 45 | 46 | public.audio 47 | public.movie 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /dist/osx/README-zh_CN.md: -------------------------------------------------------------------------------- 1 | ## 构建 macOS 版本的 Spek 2 | 3 | [[英文 English]](./README.md) 4 | 5 | 构建步骤: 6 | * 安装 [Homebrew](https://brew.sh). 7 | * 进入项目目录。 8 | * 安装依赖:`./dist/osx/install_deps.sh`。此操作将耗费一定的时间,可能需要您的 sudo 密码。 9 | * 编译并打包 Spek: `./dist/osx/bundle.sh`。 10 | 11 | 可以根据需要修改 `install_deps.sh` 和 `bundle.sh`。 -------------------------------------------------------------------------------- /dist/osx/README.md: -------------------------------------------------------------------------------- 1 | ## Build Spek for macOS 2 | 3 | [[简体中文 Simplified Chinese]](./README-zh_CN.md) 4 | 5 | Build steps: 6 | * Install [Homebrew](https://brew.sh). 7 | * Enter the project directory. 8 | * Install the dependencies: `./dist/osx/install_deps.sh`. This procedure will take some time. Your sudo password may be required. 9 | * Compile and bundle Spek: `./dist/osx/bundle.sh`. 10 | 11 | You can modify `install_deps.sh` and `bundle.sh` as needed. 12 | -------------------------------------------------------------------------------- /dist/osx/Spek.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MikeWang000000/spek-X/b3b897861bafefaaaf4f549ba046f62ec0facbdc/dist/osx/Spek.icns -------------------------------------------------------------------------------- /dist/osx/bundle.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -xeu 3 | 4 | LANGUAGES="bs ca cs da de el eo es fi fr gl he hu id it ja ko lv nb nl pl pt_BR ru sk sr@latin sv th tr uk vi zh_CN zh_TW" 5 | PROJDIR=$(realpath "$(dirname $0)/../..") 6 | 7 | [ -z "${ARCH-}" ] && ARCH=$(uname -m) 8 | if [ "$ARCH" = "x86_64" ]; then 9 | echo "Target architecture: $ARCH" 10 | MACOSX_DEPLOYMENT_TARGET=10.10 11 | elif [ "$ARCH" = "arm64" ]; then 12 | echo "Target architecture: $ARCH" 13 | MACOSX_DEPLOYMENT_TARGET=12.0 14 | else 15 | echo "Unsupported architecture: $ARCH" >&2 16 | exit 1 17 | fi 18 | 19 | DEPSDIR="$(realpath "$(dirname $0)")/deps.$ARCH" 20 | if [ ! -e "$DEPSDIR" ]; then 21 | echo "Dependency not found. Running ./install_deps.sh ..." 22 | env ARCH="$ARCH" ./install_deps.sh 23 | fi 24 | 25 | export MACOSX_DEPLOYMENT_TARGET 26 | export PATH="$DEPSDIR/bin:$PATH" 27 | export ACLOCAL="aclocal -I $DEPSDIR/share/aclocal" 28 | export PKG_CONFIG_PATH="$DEPSDIR/lib/pkgconfig" 29 | export CXX="/usr/bin/clang++ -arch $ARCH" 30 | 31 | cd "$PROJDIR" 32 | 33 | rm -f src/spek 34 | 35 | mkdir -p builddir 36 | cd builddir 37 | BUILDDIR=$(pwd) 38 | ../autogen.sh --host="$ARCH-apple-darwin" && make clean && make -j$(nproc) || exit 1 39 | 40 | cd "$PROJDIR/dist/osx" 41 | rm -fr Spek.app "Spek-$ARCH.app" 42 | mkdir -p Spek.app/Contents/MacOS 43 | mkdir -p Spek.app/Contents/Frameworks 44 | mkdir -p Spek.app/Contents/Resources 45 | mv "$BUILDDIR"/src/spek Spek.app/Contents/MacOS/Spek 46 | cp "$BUILDDIR"/dist/osx/Info.plist Spek.app/Contents/ 47 | cp "$PROJDIR"/dist/osx/Spek.icns Spek.app/Contents/Resources/ 48 | cp "$PROJDIR"/dist/osx/*.png Spek.app/Contents/Resources/ 49 | cp "$PROJDIR"/LICENCE.md Spek.app/Contents/Resources/ 50 | cp "$PROJDIR"/README.md Spek.app/Contents/Resources/ 51 | mkdir Spek.app/Contents/Resources/lic 52 | cp "$PROJDIR"/lic/* Spek.app/Contents/Resources/lic/ 53 | 54 | for lang in $LANGUAGES; do 55 | mkdir -p Spek.app/Contents/Resources/"$lang".lproj 56 | cp "$BUILDDIR"/po/"$lang".gmo Spek.app/Contents/Resources/"$lang".lproj/spek.mo 57 | mo=("$DEPSDIR"/share/locale/"$lang"/LC_MESSAGES/wxstd*.mo) 58 | test -f "$mo" && cp "$mo" Spek.app/Contents/Resources/"$lang".lproj/wxstd.mo 59 | done 60 | unset lang mo 61 | mkdir -p Spek.app/Contents/Resources/en.lproj 62 | 63 | bin="Spek.app/Contents/MacOS/Spek" 64 | echo "Updating dependendies for $bin." 65 | cp -a "$DEPSDIR"/lib/*.dylib Spek.app/Contents/Frameworks/ 66 | install_name_tool -add_rpath "@executable_path/../Frameworks" "$bin" 67 | 68 | # Sign the app 69 | codesign -fs - ./Spek.app --deep 70 | 71 | # Create a gzip tar archive 72 | rm -f "Spek.$ARCH.tgz" 73 | tar cvzf "Spek.$ARCH.tgz" Spek.app 74 | -------------------------------------------------------------------------------- /dist/osx/bundle_universal.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -xeu 3 | 4 | cd "$(dirname $0)" 5 | 6 | if [ "${1-}" != "merge_only" ]; then 7 | ARCH=x86_64 ./bundle.sh 8 | ARCH=arm64 ./bundle.sh 9 | fi 10 | 11 | SPEK_X86_64="$(realpath .)/Spek.x86_64.app" 12 | SPEK_ARM64="$(realpath .)/Spek.arm64.app" 13 | SPEK_UNIVERSAL="$(realpath .)/Spek.app" 14 | 15 | rm -rf "Spek.app" 16 | tar xf Spek.x86_64.tgz 17 | mv "Spek.app" "$SPEK_X86_64" 18 | tar xf Spek.arm64.tgz 19 | mv "Spek.app" "$SPEK_ARM64" 20 | 21 | cp -a "$SPEK_X86_64" "$SPEK_UNIVERSAL" 22 | 23 | # Merge x86_64, arm64 excutables 24 | cd "$SPEK_UNIVERSAL/Contents/MacOS" 25 | for bin in *; do 26 | test -L "$bin" && continue 27 | rm $bin 28 | lipo -create \ 29 | "$SPEK_X86_64/Contents/MacOS/$bin" \ 30 | "$SPEK_ARM64/Contents/MacOS/$bin" \ 31 | -o "$SPEK_UNIVERSAL/Contents/MacOS/$bin" 32 | done 33 | 34 | # Merge x86_64, arm64 libraries 35 | cd "$SPEK_UNIVERSAL/Contents/Frameworks" 36 | for bin in *; do 37 | test -L "$bin" && continue 38 | rm $bin 39 | lipo -create \ 40 | "$SPEK_X86_64/Contents/Frameworks/$bin" \ 41 | "$SPEK_ARM64/Contents/Frameworks/$bin" \ 42 | -o "$SPEK_UNIVERSAL/Contents/Frameworks/$bin" 43 | done 44 | 45 | # Sign the app 46 | codesign -fs - "$SPEK_UNIVERSAL" --deep 47 | 48 | # Create a gzip tar archive 49 | cd "$SPEK_UNIVERSAL/.." 50 | rm -f Spek.tgz 51 | tar cvzf Spek.tgz Spek.app 52 | -------------------------------------------------------------------------------- /dist/osx/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MikeWang000000/spek-X/b3b897861bafefaaaf4f549ba046f62ec0facbdc/dist/osx/close.png -------------------------------------------------------------------------------- /dist/osx/cross/bundle.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "$1" != "i_am_ci" ] 4 | then 5 | cat << EOF 6 | 7 | !!! DO NOT RUN THIS SCRIPT ON YOUR COMPUTER !!! 8 | ----------------------------------------------- 9 | This script is used to build Spek-X Apple Silicon packages on Intel macOS CI. 10 | It will break your dependencies if not executed in a container. 11 | 12 | EOF 13 | exit 1 14 | fi 15 | 16 | LANGUAGES="bs ca cs da de el eo es fi fr gl he hu id it ja ko lv nb nl pl pt_BR ru sk sr@latin sv th tr uk vi zh_CN zh_TW" 17 | LOCALEDIR="/usr/local/share/locale/" 18 | [ ! -d "$LOCALEDIR" ] && [ -d "$HOMEBREW_PREFIX/share/locale/" ] && LOCALEDIR="$HOMEBREW_PREFIX/share/locale/" 19 | 20 | cd $(dirname $0)/../../.. 21 | 22 | rm -f src/spek 23 | 24 | sed 's/ --host=.*"/"/' "$HOMEBREW_PREFIX"/share/wx/*/aclocal/wxwin.m4 > wxwin.m4 25 | echo "m4_include([wxwin.m4])" > acinclude.m4 26 | 27 | ./autogen.sh CC='clang -arch arm64' CXX='clang++ -arch arm64' --host=arm64-apple-darwin && make -j2 || exit 1 28 | 29 | cd dist/osx 30 | rm -fr Spek.app 31 | mkdir -p Spek.app/Contents/MacOS 32 | mkdir -p Spek.app/Contents/Frameworks 33 | mkdir -p Spek.app/Contents/Resources 34 | mv ../../src/spek Spek.app/Contents/MacOS/Spek 35 | cp Info.plist Spek.app/Contents/ 36 | cp Spek.icns Spek.app/Contents/Resources/ 37 | cp *.png Spek.app/Contents/Resources/ 38 | cp ../../LICENCE.md Spek.app/Contents/Resources/ 39 | cp ../../README.md Spek.app/Contents/Resources/ 40 | mkdir Spek.app/Contents/Resources/lic 41 | cp ../../lic/* Spek.app/Contents/Resources/lic/ 42 | 43 | for lang in $LANGUAGES; do 44 | mkdir -p Spek.app/Contents/Resources/"$lang".lproj 45 | cp -v ../../po/"$lang".gmo Spek.app/Contents/Resources/"$lang".lproj/spek.mo 46 | cp -v "$LOCALEDIR""$lang"/LC_MESSAGES/wxstd*.mo Spek.app/Contents/Resources/"$lang".lproj/wxstd.mo 47 | done 48 | mkdir -p Spek.app/Contents/Resources/en.lproj 49 | 50 | BINS="Spek.app/Contents/MacOS/Spek" 51 | while [ ! -z "$BINS" ]; do 52 | NEWBINS="" 53 | for bin in $BINS; do 54 | echo "Updating dependendies for $bin." 55 | LIBS=$(otool -L $bin | grep -e /usr/local/ -e /opt/ | tr -d '\t' | awk '{print $1}') 56 | for lib in $LIBS; do 57 | reallib=$(realpath $lib) 58 | libname=$(basename $reallib) 59 | install_name_tool -change $lib @executable_path/../Frameworks/$libname $bin 60 | if [ ! -f Spek.app/Contents/Frameworks/$libname ]; then 61 | echo "\tBundling $reallib." 62 | cp $reallib Spek.app/Contents/Frameworks/ 63 | chmod +w Spek.app/Contents/Frameworks/$libname 64 | install_name_tool -id @executable_path/../Frameworks/$libname Spek.app/Contents/Frameworks/$libname 65 | NEWBINS="$NEWBINS Spek.app/Contents/Frameworks/$libname" 66 | fi 67 | done 68 | done 69 | BINS="$NEWBINS" 70 | done 71 | 72 | # Sign the app 73 | codesign -fs - ./Spek.app --deep 74 | 75 | # Create a gzip tar archive 76 | rm -f Spek.tgz 77 | tar cvzf Spek.tgz ./Spek.app 78 | 79 | # Clean up 80 | cd ../.. 81 | rm wxwin.m4 acinclude.m4 82 | -------------------------------------------------------------------------------- /dist/osx/cross/install_deps.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "$1" != "i_am_ci" ] 4 | then 5 | cat << EOF 6 | 7 | !!! DO NOT RUN THIS SCRIPT ON YOUR COMPUTER !!! 8 | ----------------------------------------------- 9 | This script is used to build Spek-X Apple Silicon packages on Intel macOS CI. 10 | It will break your dependencies if not executed in a container. 11 | 12 | EOF 13 | exit 1 14 | fi 15 | 16 | FFMPEG_VER="7.1" 17 | PREFIX="/usr/local" 18 | 19 | # Check Homebrew 20 | brew --version >/dev/null 2>&1 || { 21 | echo "Building spek.app requires Homebrew. Follow the instructions at [https://brew.sh] to install Homebrew." 22 | exit 1 23 | } 24 | 25 | brew install autoconf automake gettext intltool libtool pkg-config wxwidgets nasm wget coreutils || exit 1 26 | # Force install arm64 libraries on x86_64 machines 27 | for dep in jpeg-turbo libpng zstd libtiff pcre2 wxwidgets 28 | do 29 | brew reinstall $(brew fetch --force --bottle-tag=arm64_ventura "${dep}" | egrep -om1 '/Users/.*\.gz') || exit 1 30 | done 31 | 32 | rm -rf $(dirname $0)/../deps 33 | mkdir -p $(dirname $0)/../deps 34 | cd $(dirname $0)/../deps 35 | 36 | # === FFmpeg === 37 | echo "# Installing FFmpeg..." 38 | brew unlink ffmpeg 39 | wget "https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VER}.tar.bz2" || exit 1 40 | tar xjvf "ffmpeg-${FFMPEG_VER}.tar.bz2" 41 | cd "ffmpeg-${FFMPEG_VER}" 42 | ./configure \ 43 | --enable-cross-compile \ 44 | --arch=arm64 \ 45 | --cc='clang -arch arm64' \ 46 | --prefix="$PREFIX" \ 47 | --enable-version3 \ 48 | --enable-gpl \ 49 | --disable-programs \ 50 | --disable-doc \ 51 | --disable-debug \ 52 | --enable-static \ 53 | --disable-shared \ 54 | --enable-pic \ 55 | --disable-swscale \ 56 | --disable-postproc \ 57 | --disable-avfilter \ 58 | --disable-avdevice \ 59 | --disable-network \ 60 | --disable-xlib \ 61 | --disable-encoders \ 62 | --disable-hwaccels \ 63 | --disable-muxers \ 64 | --disable-bsfs \ 65 | --disable-devices \ 66 | --disable-filters \ 67 | --disable-protocols \ 68 | --enable-protocol=file,pipe \ 69 | --disable-parsers \ 70 | --enable-parser=aac,aac_latm,ac3,cook,dca,dirac,dolby_e,flac,g723_1,g729,gsm,mlp,mpegaudio,opus,sbc,sipr,tak,vorbis\ 71 | --disable-decoders \ 72 | --enable-decoder=aac,aac_fixed,aac_latm,ac3,ac3_fixed,acelp_kelvin,alac,als,amrnb,amrwb,ape,aptx,aptx_hd,atrac1,atrac3,atrac3al,atrac3p,atrac3pal,atrac9,binkaudio_dct,binkaudio_rdft,bmv_audio,cook,dca,dfpwm,dolby_e,dsd_lsbf,dsd_msbf,dsd_lsbf_planar,dsd_msbf_planar,dsicinaudio,dss_sp,dst,eac3,evrc,fastaudio,ffwavesynth,flac,g723_1,g729,gsm,gsm_ms,hca,hcom,iac,ilbc,imc,interplay_acm,mace3,mace6,metasound,mlp,mp1,mp1float,mp2,mp2float,mp3float,mp3,mp3adufloat,mp3adu,mp3on4float,mp3on4,mpc7,mpc8,msnsiren,nellymoser,on2avc,opus,paf_audio,qcelp,qdm2,qdmc,ra_144,ra_288,ralf,sbc,shorten,sipr,siren,smackaud,sonic,tak,truehd,truespeech,tta,twinvq,vmdaudio,vorbis,wavpack,wmalossless,wmapro,wmav1,wmav2,wmavoice,ws_snd1,xma1,xma2,pcm_alaw,pcm_bluray,pcm_dvd,pcm_f16le,pcm_f24le,pcm_f32be,pcm_f32le,pcm_f64be,pcm_f64le,pcm_lxf,pcm_mulaw,pcm_s8,pcm_s8_planar,pcm_s16be,pcm_s16be_planar,pcm_s16le,pcm_s16le_planar,pcm_s24be,pcm_s24daud,pcm_s24le,pcm_s24le_planar,pcm_s32be,pcm_s32le,pcm_s32le_planar,pcm_s64be,pcm_s64le,pcm_sga,pcm_u8,pcm_u16be,pcm_u16le,pcm_u24be,pcm_u24le,pcm_u32be,pcm_u32le,pcm_vidc,derf_dpcm,gremlin_dpcm,interplay_dpcm,roq_dpcm,sdx2_dpcm,sol_dpcm,xan_dpcm,adpcm_4xm,adpcm_adx,adpcm_afc,adpcm_agm,adpcm_aica,adpcm_argo,adpcm_ct,adpcm_dtk,adpcm_ea,adpcm_ea_maxis_xa,adpcm_ea_r1,adpcm_ea_r2,adpcm_ea_r3,adpcm_ea_xas,adpcm_g722,adpcm_g726,adpcm_g726le,adpcm_ima_acorn,adpcm_ima_amv,adpcm_ima_alp,adpcm_ima_apc,adpcm_ima_apm,adpcm_ima_cunning,adpcm_ima_dat4,adpcm_ima_dk3,adpcm_ima_dk4,adpcm_ima_ea_eacs,adpcm_ima_ea_sead,adpcm_ima_iss,adpcm_ima_moflex,adpcm_ima_mtf,adpcm_ima_oki,adpcm_ima_qt,adpcm_ima_rad,adpcm_ima_ssi,adpcm_ima_smjpeg,adpcm_ima_wav,adpcm_ima_ws,adpcm_ms,adpcm_mtaf,adpcm_psx,adpcm_sbpro_2,adpcm_sbpro_3,adpcm_sbpro_4,adpcm_swf,adpcm_thp,adpcm_thp_le,adpcm_vima,adpcm_xa,adpcm_yamaha,adpcm_zork || exit 1 73 | make -j3 || exit 1 74 | echo "$ sudo make install # your password may be necessary" 75 | sudo make install || exit 1 76 | 77 | # Clean up 78 | cd ../.. 79 | rm -rf ./deps 80 | -------------------------------------------------------------------------------- /dist/osx/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MikeWang000000/spek-X/b3b897861bafefaaaf4f549ba046f62ec0facbdc/dist/osx/help.png -------------------------------------------------------------------------------- /dist/osx/open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MikeWang000000/spek-X/b3b897861bafefaaaf4f549ba046f62ec0facbdc/dist/osx/open.png -------------------------------------------------------------------------------- /dist/osx/save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MikeWang000000/spek-X/b3b897861bafefaaaf4f549ba046f62ec0facbdc/dist/osx/save.png -------------------------------------------------------------------------------- /dist/win/README-zh_CN.md: -------------------------------------------------------------------------------- 1 | ## 构建 Windows 版本的 Spek 2 | 3 | [[英文 English]](./README.md) 4 | 5 | 现在,您可以通过 MSYS2 在 Windows 上直接构建 Spek 可执行程序,无需交叉编译。 6 | 7 | 构建步骤: 8 | * 安装 [MSYS2](https://www.msys2.org)。 9 | * 运行 `mingw64.exe`。如果您使用 Windows on ARM,请运行 `clangarm64.exe`。 10 | * 进入项目目录。 11 | * 安装依赖:`./dist/win/install_deps.sh`。此操作将耗费一定的时间。 12 | * 编译并打包 Spek: `./dist/win/bundle.sh`。 13 | 14 | 可以根据需要修改 `install_deps.sh` 和 `bundle.sh`。 -------------------------------------------------------------------------------- /dist/win/README.md: -------------------------------------------------------------------------------- 1 | ## Build Spek for Windows 2 | 3 | [[简体中文 Simplified Chinese]](./README-zh_CN.md) 4 | 5 | You can now build the Spek executable directly under MSYS2 on Windows without cross-compiling. 6 | 7 | Build steps: 8 | * Install [MSYS2](https://www.msys2.org). 9 | * Run `mingw64.exe`. If you are using Windows on ARM, please run `clangarm64.exe`. 10 | * Enter the project directory. 11 | * Install the dependencies: `./dist/win/install_deps.sh`. This procedure will take some time. 12 | * Compile and bundle Spek: `./dist/win/bundle.sh`. 13 | 14 | You can modify `install_deps.sh` and `bundle.sh` as needed. 15 | -------------------------------------------------------------------------------- /dist/win/bundle.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -xeu 3 | 4 | # This script will compile spek.exe under MSYS2 and make a ZIP archive. 5 | # Check README.md in this directory for instructions. 6 | 7 | # Adjust these variables if necessary. 8 | MAKE=make 9 | JOBS=3 10 | ZIP=zip 11 | STRIP=strip 12 | WINDRES=windres 13 | CYGPATH=cygpath 14 | WX_CONFIG=wx-config 15 | WX_PREFIX="$(wx-config --prefix)" 16 | 17 | LANGUAGES="bs ca cs da de el eo es fi fr gl he hu id it ja ko lv nb nl pl pt_BR ru sk sr@latin sv th tr uk vi zh_CN zh_TW" 18 | 19 | cd "$(dirname $0)"/../.. 20 | rm -fr dist/win/build && mkdir dist/win/build 21 | 22 | # Test windres 23 | "$WINDRES" dist/win/spek.rc -O coff -o dist/win/spek.res 24 | 25 | # Run autogen.sh 26 | CXXFLAGS="--static" \ 27 | LDFLAGS="-mwindows dist/win/spek.res" ./autogen.sh \ 28 | --disable-shared \ 29 | --enable-static \ 30 | --disable-valgrind \ 31 | --with-wx-config="$WX_CONFIG" \ 32 | --prefix="$PWD/dist/win/build" && \ 33 | "$MAKE" clean 34 | 35 | # Compile PO files first 36 | cd po && "$MAKE" && cd .. 37 | 38 | # Compile the resource file 39 | ./dist/win/compile-rc.py "$WINDRES" "$(CYGPATH "$WX_PREFIX")" $LANGUAGES 40 | mkdir -p src/dist/win && cp dist/win/spek.res src/dist/win/ 41 | 42 | # Compile spek.exe 43 | "$MAKE" V=1 -j "$JOBS" && "$MAKE" install 44 | "$STRIP" dist/win/build/bin/spek.exe 45 | 46 | # Copy files to the bundle 47 | cd dist/win 48 | rm -fr Spek && mkdir Spek 49 | cp build/bin/spek.exe Spek/ 50 | cp ../../LICENCE.md Spek/ 51 | cp ../../README.md Spek/ 52 | mkdir Spek/licenses 53 | cp ../../lic/* Spek/licenses/ 54 | for lic in Spek/licenses/*; do 55 | mv "$lic" "$lic.txt" 56 | done 57 | rm -fr build 58 | cd ../.. 59 | 60 | # Create a zip archive 61 | cd dist/win/Spek 62 | rm -f Spek.zip 63 | "$ZIP" -mr Spek.zip * 64 | cd ../../.. 65 | 66 | # Clean up 67 | rm -fr src/dist 68 | rm dist/win/spek.res 69 | -------------------------------------------------------------------------------- /dist/win/close.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MikeWang000000/spek-X/b3b897861bafefaaaf4f549ba046f62ec0facbdc/dist/win/close.ico -------------------------------------------------------------------------------- /dist/win/compile-rc.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # This script adds MO files to resource file, and compiles spek.rc to spek.res file. 4 | 5 | # Both GNU windres and llvm-windres do not accept characters other than [A-Za-z0-9_] in resource name IDs. 6 | # However, this will leads wxWidgets not loading MO files like "spek_sr@latin". 7 | # Some hacky workarounds are used in this Python script. 8 | 9 | # Note: This script only accepts Windows style paths. 10 | 11 | import re 12 | import os 13 | import sys 14 | import glob 15 | 16 | WINDRES = sys.argv[1] 17 | WX_PREFIX = sys.argv[2] 18 | LANGUAGES = sys.argv[3:] 19 | 20 | token_map = {} 21 | 22 | # Replaces invalid characters to '_' and stores mapping relations. 23 | def safe_token(token): 24 | safe = re.sub(r'[^A-Za-z0-9_]', '_', token) 25 | if safe != token: 26 | token_map[safe] = token 27 | return safe 28 | 29 | def wxstd_path(lang): 30 | paths = glob.glob(f'{WX_PREFIX}/share/locale/{lang}/LC_MESSAGES/wxstd*.mo') 31 | if paths: 32 | return paths[0] 33 | 34 | 35 | os.chdir(os.path.dirname(__file__)) 36 | 37 | rc_content = '#include "spek.rc"\n' 38 | for lang in LANGUAGES: 39 | token = safe_token(f'spek_{lang}') 40 | rc_content += f'{token} MOFILE "../../po/{lang}.gmo"\n' 41 | wxstd_mo = wxstd_path(lang) 42 | if wxstd_mo: 43 | token = safe_token(f'wxstd_{lang}') 44 | rc_content += f'{token} MOFILE "{wxstd_mo}"\n' 45 | 46 | with open('spek-all.rc', 'w') as fo: 47 | fo.write(rc_content) 48 | 49 | # Compile RC File 50 | ret = os.system(f'"{WINDRES}" spek-all.rc -O coff -o spek.res') 51 | if ret != 0: 52 | exit(1) 53 | 54 | # Hack: Restore original resource IDs by editing the binary file. 55 | # This workaround is not always safe. 56 | with open('spek.res', 'rb+') as f: 57 | content = f.read() 58 | for token in token_map: 59 | old_token = token.upper().encode('UTF-16-LE') 60 | new_token = token_map[token].upper().encode('UTF-16-LE') 61 | content = content.replace(old_token, new_token) 62 | f.seek(0) 63 | f.write(content) 64 | 65 | # Clean up 66 | os.remove('spek-all.rc') 67 | -------------------------------------------------------------------------------- /dist/win/help.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MikeWang000000/spek-X/b3b897861bafefaaaf4f549ba046f62ec0facbdc/dist/win/help.ico -------------------------------------------------------------------------------- /dist/win/install_deps.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -xeu 3 | 4 | # This script will compile and install the dependencies which are needed to build spek.exe. 5 | # Check README.md in this directory for instructions. 6 | 7 | # Adjust these variables if necessary. 8 | WX_VER="3.2.6" 9 | WX_URL="https://github.com/wxWidgets/wxWidgets/releases/download/v$WX_VER/wxWidgets-$WX_VER.tar.bz2" 10 | WX_SHA="939e5b77ddc5b6092d1d7d29491fe67010a2433cf9b9c0d841ee4d04acb9dce7" 11 | 12 | FFMPEG_VER="7.1" 13 | FFMPEG_URL="https://ffmpeg.org/releases/ffmpeg-$FFMPEG_VER.tar.bz2" 14 | FFMPEG_SHA="fd59e6160476095082e94150ada5a6032d7dcc282fe38ce682a00c18e7820528" 15 | 16 | PREFIX="$MINGW_PREFIX" 17 | 18 | pacman -Sy && pacman -S --needed --noconfirm autotools patch intltool yasm zip "${MINGW_PACKAGE_PREFIX}-toolchain" 19 | 20 | rm -rf $(dirname $0)/deps 21 | mkdir -p $(dirname $0)/deps 22 | cd $(dirname $0)/deps 23 | 24 | # === wxWidgets === 25 | echo "# Installing wxWidgets..." 26 | wget "$WX_URL" 27 | echo "$WX_SHA wxWidgets-$WX_VER.tar.bz2" | sha256sum -c 28 | tar xf "wxWidgets-${WX_VER}.tar.bz2" 29 | cd "wxWidgets-${WX_VER}" 30 | 31 | # fix: pt_BR zh_CN zh_TW translation not works 32 | patch -p1 < ../../wx-translation.patch 33 | 34 | # fix: clang-19 compilation error 35 | patch -p1 < ../../wx-wxchar.patch 36 | 37 | mkdir msw-build 38 | cd msw-build 39 | ../configure \ 40 | --prefix="$PREFIX" \ 41 | --disable-shared \ 42 | --without-libtiff \ 43 | --without-nanosvg \ 44 | --without-opengl \ 45 | --disable-stc \ 46 | --disable-richtext \ 47 | --disable-propgrid \ 48 | --disable-aui \ 49 | --disable-ribbon \ 50 | --disable-webview 51 | make -j$(nproc) && make install 52 | cd ../.. 53 | 54 | # === FFmpeg === 55 | echo "# Installing FFmpeg..." 56 | if gcc -v >/dev/null 2>&1; then 57 | CC=gcc 58 | elif clang -v >/dev/null 2>&1; then 59 | CC=clang 60 | else 61 | CC=cc 62 | fi 63 | if [ "$MSYSTEM" = "CLANGARM64" ]; then 64 | ARCH=arm64 65 | else 66 | ARCH=x86_64 67 | fi 68 | wget "$FFMPEG_URL" 69 | echo "$FFMPEG_SHA ffmpeg-${FFMPEG_VER}.tar.bz2" | sha256sum -c 70 | tar xf "ffmpeg-${FFMPEG_VER}.tar.bz2" 71 | cd "ffmpeg-${FFMPEG_VER}" 72 | ./configure \ 73 | --prefix="$PREFIX" \ 74 | --cc="$CC" \ 75 | --arch="$ARCH" \ 76 | --enable-version3 \ 77 | --enable-gpl \ 78 | --disable-programs \ 79 | --disable-doc \ 80 | --disable-debug \ 81 | --enable-static \ 82 | --disable-shared \ 83 | --enable-pic \ 84 | --disable-swscale \ 85 | --disable-postproc \ 86 | --disable-avfilter \ 87 | --disable-avdevice \ 88 | --disable-network \ 89 | --disable-xlib \ 90 | --disable-encoders \ 91 | --disable-hwaccels \ 92 | --disable-muxers \ 93 | --disable-bsfs \ 94 | --disable-devices \ 95 | --disable-filters \ 96 | --disable-protocols \ 97 | --enable-protocol=file,pipe \ 98 | --disable-parsers \ 99 | --enable-parser=aac,aac_latm,ac3,cook,dca,dirac,dolby_e,flac,g723_1,g729,gsm,mlp,mpegaudio,opus,sbc,sipr,tak,vorbis \ 100 | --disable-decoders \ 101 | --enable-decoder=aac,aac_fixed,aac_latm,ac3,ac3_fixed,acelp_kelvin,alac,als,amrnb,amrwb,ape,aptx,aptx_hd,atrac1,atrac3,atrac3al,atrac3p,atrac3pal,atrac9,binkaudio_dct,binkaudio_rdft,bmv_audio,cook,dca,dfpwm,dolby_e,dsd_lsbf,dsd_msbf,dsd_lsbf_planar,dsd_msbf_planar,dsicinaudio,dss_sp,dst,eac3,evrc,fastaudio,ffwavesynth,flac,g723_1,g729,gsm,gsm_ms,hca,hcom,iac,ilbc,imc,interplay_acm,mace3,mace6,metasound,mlp,mp1,mp1float,mp2,mp2float,mp3float,mp3,mp3adufloat,mp3adu,mp3on4float,mp3on4,mpc7,mpc8,msnsiren,nellymoser,on2avc,opus,paf_audio,qcelp,qdm2,qdmc,ra_144,ra_288,ralf,sbc,shorten,sipr,siren,smackaud,sonic,tak,truehd,truespeech,tta,twinvq,vmdaudio,vorbis,wavpack,wmalossless,wmapro,wmav1,wmav2,wmavoice,ws_snd1,xma1,xma2,pcm_alaw,pcm_bluray,pcm_dvd,pcm_f16le,pcm_f24le,pcm_f32be,pcm_f32le,pcm_f64be,pcm_f64le,pcm_lxf,pcm_mulaw,pcm_s8,pcm_s8_planar,pcm_s16be,pcm_s16be_planar,pcm_s16le,pcm_s16le_planar,pcm_s24be,pcm_s24daud,pcm_s24le,pcm_s24le_planar,pcm_s32be,pcm_s32le,pcm_s32le_planar,pcm_s64be,pcm_s64le,pcm_sga,pcm_u8,pcm_u16be,pcm_u16le,pcm_u24be,pcm_u24le,pcm_u32be,pcm_u32le,pcm_vidc,derf_dpcm,gremlin_dpcm,interplay_dpcm,roq_dpcm,sdx2_dpcm,sol_dpcm,xan_dpcm,adpcm_4xm,adpcm_adx,adpcm_afc,adpcm_agm,adpcm_aica,adpcm_argo,adpcm_ct,adpcm_dtk,adpcm_ea,adpcm_ea_maxis_xa,adpcm_ea_r1,adpcm_ea_r2,adpcm_ea_r3,adpcm_ea_xas,adpcm_g722,adpcm_g726,adpcm_g726le,adpcm_ima_acorn,adpcm_ima_amv,adpcm_ima_alp,adpcm_ima_apc,adpcm_ima_apm,adpcm_ima_cunning,adpcm_ima_dat4,adpcm_ima_dk3,adpcm_ima_dk4,adpcm_ima_ea_eacs,adpcm_ima_ea_sead,adpcm_ima_iss,adpcm_ima_moflex,adpcm_ima_mtf,adpcm_ima_oki,adpcm_ima_qt,adpcm_ima_rad,adpcm_ima_ssi,adpcm_ima_smjpeg,adpcm_ima_wav,adpcm_ima_ws,adpcm_ms,adpcm_mtaf,adpcm_psx,adpcm_sbpro_2,adpcm_sbpro_3,adpcm_sbpro_4,adpcm_swf,adpcm_thp,adpcm_thp_le,adpcm_vima,adpcm_xa,adpcm_yamaha,adpcm_zork 102 | make -j$(nproc) && make install 103 | 104 | # Clean up 105 | cd ../.. 106 | rm -rf ./deps 107 | -------------------------------------------------------------------------------- /dist/win/open.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MikeWang000000/spek-X/b3b897861bafefaaaf4f549ba046f62ec0facbdc/dist/win/open.ico -------------------------------------------------------------------------------- /dist/win/save.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MikeWang000000/spek-X/b3b897861bafefaaaf4f549ba046f62ec0facbdc/dist/win/save.ico -------------------------------------------------------------------------------- /dist/win/spek.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MikeWang000000/spek-X/b3b897861bafefaaaf4f549ba046f62ec0facbdc/dist/win/spek.ico -------------------------------------------------------------------------------- /dist/win/spek.manifest: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | PerMonitorV2, system 18 | true 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /dist/win/spek.rc: -------------------------------------------------------------------------------- 1 | aaaa ICON "spek.ico" 2 | help ICON "help.ico" 3 | open ICON "open.ico" 4 | save ICON "save.ico" 5 | close ICON "close.ico" 6 | 7 | 1 24 "spek.manifest" -------------------------------------------------------------------------------- /dist/win/wx-translation.patch: -------------------------------------------------------------------------------- 1 | diff --git a/src/common/translation.cpp b/src/common/translation.cpp 2 | index 30b1ca42dc..a64778061a 100644 3 | --- a/src/common/translation.cpp 4 | +++ b/src/common/translation.cpp 5 | @@ -1398,11 +1398,12 @@ bool wxTranslations::AddStdCatalog() 6 | // the name without the version if it's not found, as message catalogs 7 | // typically won't have the version in their names under non-Unix platforms 8 | // (i.e. where they're not installed by our own "make install"). 9 | - wxString domain("wxstd-" wxSTRINGIZE(wxMAJOR_VERSION) "." wxSTRINGIZE(wxMINOR_VERSION)); 10 | - if ( GetBestAvailableTranslation(domain).empty() ) 11 | - domain = wxS("wxstd"); 12 | + if ( AddAvailableCatalog("wxstd-" wxSTRINGIZE(wxMAJOR_VERSION) "." wxSTRINGIZE(wxMINOR_VERSION)) ) 13 | + return true; 14 | + if ( AddCatalog(wxS("wxstd")) ) 15 | + return true; 16 | 17 | - return AddCatalog(domain); 18 | + return false; 19 | } 20 | 21 | #if !wxUSE_UNICODE 22 | @@ -1577,28 +1578,7 @@ wxString wxTranslations::DoGetBestAvailableTranslation(const wxString& domain, c 23 | 24 | if ( !m_lang.empty() ) 25 | { 26 | - wxLogTrace(TRACE_I18N, 27 | - "searching for best translation to %s for domain '%s'", 28 | - m_lang, domain); 29 | - 30 | - wxString lang; 31 | - if ( available.Index(m_lang) != wxNOT_FOUND ) 32 | - { 33 | - lang = m_lang; 34 | - } 35 | - else 36 | - { 37 | - const wxString baselang = m_lang.BeforeFirst('_'); 38 | - if ( baselang != m_lang && available.Index(baselang) != wxNOT_FOUND ) 39 | - lang = baselang; 40 | - } 41 | - 42 | - if ( lang.empty() ) 43 | - wxLogTrace(TRACE_I18N, " => no available translations found"); 44 | - else 45 | - wxLogTrace(TRACE_I18N, " => found '%s'", lang); 46 | - 47 | - return lang; 48 | + return m_lang; 49 | } 50 | 51 | wxLogTrace(TRACE_I18N, "choosing best language for domain '%s'", domain); 52 | -------------------------------------------------------------------------------- /dist/win/wx-wxchar.patch: -------------------------------------------------------------------------------- 1 | diff --git a/include/wx/defs.h b/include/wx/defs.h 2 | index 39ce129477..32f4d876b8 100644 3 | --- a/include/wx/defs.h 4 | +++ b/include/wx/defs.h 5 | @@ -1159,20 +1159,23 @@ typedef double wxDouble; 6 | 7 | /* Define wxChar16 and wxChar32 */ 8 | 9 | +#ifdef __cplusplus 10 | + 11 | #if SIZEOF_WCHAR_T == 2 12 | #define wxWCHAR_T_IS_WXCHAR16 13 | typedef wchar_t wxChar16; 14 | #else 15 | - typedef wxUint16 wxChar16; 16 | + typedef char16_t wxChar16; 17 | #endif 18 | 19 | #if SIZEOF_WCHAR_T == 4 20 | #define wxWCHAR_T_IS_WXCHAR32 21 | typedef wchar_t wxChar32; 22 | #else 23 | - typedef wxUint32 wxChar32; 24 | + typedef char32_t wxChar32; 25 | #endif 26 | 27 | +#endif /* __cplusplus */ 28 | 29 | /* 30 | Helper macro expanding into the given "m" macro invoked with each of the 31 | -------------------------------------------------------------------------------- /lic/Expat: -------------------------------------------------------------------------------- 1 | Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd 2 | and Clark Cooper 3 | Copyright (c) 2001, 2002 Expat maintainers. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | "Software"), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included 14 | in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /lic/libpng: -------------------------------------------------------------------------------- 1 | 2 | This copy of the libpng notices is provided for your convenience. In case of 3 | any discrepancy between this copy and the notices in the file png.h that is 4 | included in the libpng distribution, the latter shall prevail. 5 | 6 | COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: 7 | 8 | If you modify libpng you may insert additional notices immediately following 9 | this sentence. 10 | 11 | This code is released under the libpng license. 12 | 13 | libpng versions 1.2.6, August 15, 2004, through 1.5.12, July 11, 2012, are 14 | Copyright (c) 2004, 2006-2012 Glenn Randers-Pehrson, and are 15 | distributed according to the same disclaimer and license as libpng-1.2.5 16 | with the following individual added to the list of Contributing Authors 17 | 18 | Cosmin Truta 19 | 20 | libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are 21 | Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are 22 | distributed according to the same disclaimer and license as libpng-1.0.6 23 | with the following individuals added to the list of Contributing Authors 24 | 25 | Simon-Pierre Cadieux 26 | Eric S. Raymond 27 | Gilles Vollant 28 | 29 | and with the following additions to the disclaimer: 30 | 31 | There is no warranty against interference with your enjoyment of the 32 | library or against infringement. There is no warranty that our 33 | efforts or the library will fulfill any of your particular purposes 34 | or needs. This library is provided with all faults, and the entire 35 | risk of satisfactory quality, performance, accuracy, and effort is with 36 | the user. 37 | 38 | libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are 39 | Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are 40 | distributed according to the same disclaimer and license as libpng-0.96, 41 | with the following individuals added to the list of Contributing Authors: 42 | 43 | Tom Lane 44 | Glenn Randers-Pehrson 45 | Willem van Schaik 46 | 47 | libpng versions 0.89, June 1996, through 0.96, May 1997, are 48 | Copyright (c) 1996, 1997 Andreas Dilger 49 | Distributed according to the same disclaimer and license as libpng-0.88, 50 | with the following individuals added to the list of Contributing Authors: 51 | 52 | John Bowler 53 | Kevin Bracey 54 | Sam Bushell 55 | Magnus Holmgren 56 | Greg Roelofs 57 | Tom Tanner 58 | 59 | libpng versions 0.5, May 1995, through 0.88, January 1996, are 60 | Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. 61 | 62 | For the purposes of this copyright and license, "Contributing Authors" 63 | is defined as the following set of individuals: 64 | 65 | Andreas Dilger 66 | Dave Martindale 67 | Guy Eric Schalnat 68 | Paul Schmidt 69 | Tim Wegner 70 | 71 | The PNG Reference Library is supplied "AS IS". The Contributing Authors 72 | and Group 42, Inc. disclaim all warranties, expressed or implied, 73 | including, without limitation, the warranties of merchantability and of 74 | fitness for any purpose. The Contributing Authors and Group 42, Inc. 75 | assume no liability for direct, indirect, incidental, special, exemplary, 76 | or consequential damages, which may result from the use of the PNG 77 | Reference Library, even if advised of the possibility of such damage. 78 | 79 | Permission is hereby granted to use, copy, modify, and distribute this 80 | source code, or portions hereof, for any purpose, without fee, subject 81 | to the following restrictions: 82 | 83 | 1. The origin of this source code must not be misrepresented. 84 | 85 | 2. Altered versions must be plainly marked as such and must not 86 | be misrepresented as being the original source. 87 | 88 | 3. This Copyright notice may not be removed or altered from any 89 | source or altered source distribution. 90 | 91 | The Contributing Authors and Group 42, Inc. specifically permit, without 92 | fee, and encourage the use of this source code as a component to 93 | supporting the PNG file format in commercial products. If you use this 94 | source code in a product, acknowledgment is not required but would be 95 | appreciated. 96 | 97 | 98 | A "png_get_copyright" function is available, for convenient use in "about" 99 | boxes and the like: 100 | 101 | printf("%s",png_get_copyright(NULL)); 102 | 103 | Also, the PNG logo (in PNG format, of course) is supplied in the 104 | files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). 105 | 106 | Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a 107 | certification mark of the Open Source Initiative. 108 | 109 | Glenn Randers-Pehrson 110 | glennrp at users.sourceforge.net 111 | July 11, 2012 112 | -------------------------------------------------------------------------------- /lic/libtiff: -------------------------------------------------------------------------------- 1 | Copyright (c) 1988-1997 Sam Leffler 2 | Copyright (c) 1991-1997 Silicon Graphics, Inc. 3 | 4 | Permission to use, copy, modify, distribute, and sell this software and 5 | its documentation for any purpose is hereby granted without fee, provided 6 | that (i) the above copyright notices and this permission notice appear in 7 | all copies of the software and related documentation, and (ii) the names of 8 | Sam Leffler and Silicon Graphics may not be used in any advertising or 9 | publicity relating to the software without the specific, prior written 10 | permission of Sam Leffler and Silicon Graphics. 11 | 12 | THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 13 | EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 14 | WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 15 | 16 | IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR 17 | ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, 18 | OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 19 | WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 20 | LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 21 | OF THIS SOFTWARE. 22 | -------------------------------------------------------------------------------- /lic/regex: -------------------------------------------------------------------------------- 1 | This regular expression package was originally developed by Henry Spencer. 2 | It bears the following copyright notice: 3 | 4 | ********************************************************************** 5 | 6 | Copyright (c) 1998, 1999 Henry Spencer. All rights reserved. 7 | 8 | Development of this software was funded, in part, by Cray Research Inc., 9 | UUNET Communications Services Inc., Sun Microsystems Inc., and Scriptics 10 | Corporation, none of whom are responsible for the results. The author 11 | thanks all of them. 12 | 13 | Redistribution and use in source and binary forms -- with or without 14 | modification -- are permitted for any purpose, provided that 15 | redistributions in source form retain this entire copyright notice and 16 | indicate the origin and nature of any modifications. 17 | 18 | I'd appreciate being given credit for this package in the documentation 19 | of software which uses it, but that is not a requirement. 20 | 21 | THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 22 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 23 | AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 24 | HENRY SPENCER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 25 | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 26 | PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 27 | OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 28 | WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 29 | OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 30 | ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 | 32 | ********************************************************************** 33 | 34 | wxWindows adopted the code out of Tcl 8.4.5. Portions of regc_locale.c 35 | and re_syntax.n were developed by Tcl developers other than Henry Spencer; 36 | these files bear the Tcl copyright and license notice: 37 | 38 | ********************************************************************** 39 | 40 | This software is copyrighted by the Regents of the University of 41 | California, Sun Microsystems, Inc., Scriptics Corporation, ActiveState 42 | Corporation and other parties. The following terms apply to all files 43 | associated with the software unless explicitly disclaimed in 44 | individual files. 45 | 46 | The authors hereby grant permission to use, copy, modify, distribute, 47 | and license this software and its documentation for any purpose, provided 48 | that existing copyright notices are retained in all copies and that this 49 | notice is included verbatim in any distributions. No written agreement, 50 | license, or royalty fee is required for any of the authorized uses. 51 | Modifications to this software may be copyrighted by their authors 52 | and need not follow the licensing terms described here, provided that 53 | the new terms are clearly indicated on the first page of each file where 54 | they apply. 55 | 56 | IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY 57 | FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 58 | ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY 59 | DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE 60 | POSSIBILITY OF SUCH DAMAGE. 61 | 62 | THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, 63 | INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, 64 | FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE 65 | IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE 66 | NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR 67 | MODIFICATIONS. 68 | 69 | GOVERNMENT USE: If you are acquiring this software on behalf of the 70 | U.S. government, the Government shall have only "Restricted Rights" 71 | in the software and related documentation as defined in the Federal 72 | Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you 73 | are acquiring the software on behalf of the Department of Defense, the 74 | software shall be classified as "Commercial Computer Software" and the 75 | Government shall have only "Restricted Rights" as defined in Clause 76 | 252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the 77 | authors grant the U.S. Government and others acting in its behalf 78 | permission to use and distribute the software in accordance with the 79 | terms specified in this license. 80 | 81 | ********************************************************************** 82 | 83 | The wxWindows licence applies to further modifications to regcustom.h 84 | and regc_locale.c. 85 | 86 | **************************************************************************** 87 | -------------------------------------------------------------------------------- /lic/wxWindows: -------------------------------------------------------------------------------- 1 | wxWindows Library Licence, Version 3.1 2 | ====================================== 3 | 4 | Copyright (C) 1998-2005 Julian Smart, Robert Roebling et al 5 | 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this licence document, but changing it is not allowed. 8 | 9 | WXWINDOWS LIBRARY LICENCE 10 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 11 | 12 | This library is free software; you can redistribute it and/or modify it 13 | under the terms of the GNU Library General Public Licence as published by 14 | the Free Software Foundation; either version 2 of the Licence, or (at 15 | your option) any later version. 16 | 17 | This library is distributed in the hope that it will be useful, but 18 | WITHOUT ANY WARRANTY; without even the implied warranty of 19 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library 20 | General Public Licence for more details. 21 | 22 | You should have received a copy of the GNU Library General Public Licence 23 | along with this software, usually in a file named COPYING.LIB. If not, 24 | write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, 25 | Boston, MA 02111-1307 USA. 26 | 27 | EXCEPTION NOTICE 28 | 29 | 1. As a special exception, the copyright holders of this library give 30 | permission for additional uses of the text contained in this release of 31 | the library as licenced under the wxWindows Library Licence, applying 32 | either version 3.1 of the Licence, or (at your option) any later version of 33 | the Licence as published by the copyright holders of version 34 | 3.1 of the Licence document. 35 | 36 | 2. The exception is that you may use, copy, link, modify and distribute 37 | under your own terms, binary object code versions of works based 38 | on the Library. 39 | 40 | 3. If you copy code from files distributed under the terms of the GNU 41 | General Public Licence or the GNU Library General Public Licence into a 42 | copy of this library, as this licence permits, the exception does not 43 | apply to the code that you add in this way. To avoid misleading anyone as 44 | to the status of such modified files, you must delete this exception 45 | notice from such code and/or adjust the licensing conditions notice 46 | accordingly. 47 | 48 | 4. If you write modifications of your own for this library, it is your 49 | choice whether to permit this exception to apply to your modifications. 50 | If you do not wish that, you must delete the exception notice from such 51 | code and/or adjust the licensing conditions notice accordingly. 52 | 53 | 54 | -------------------------------------------------------------------------------- /lic/zlib: -------------------------------------------------------------------------------- 1 | /* zlib.h -- interface of the 'zlib' general purpose compression library 2 | version 1.2.7, May 2nd, 2012 3 | 4 | Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler 5 | 6 | This software is provided 'as-is', without any express or implied 7 | warranty. In no event will the authors be held liable for any damages 8 | arising from the use of this software. 9 | 10 | Permission is granted to anyone to use this software for any purpose, 11 | including commercial applications, and to alter it and redistribute it 12 | freely, subject to the following restrictions: 13 | 14 | 1. The origin of this software must not be misrepresented; you must not 15 | claim that you wrote the original software. If you use this software 16 | in a product, an acknowledgment in the product documentation would be 17 | appreciated but is not required. 18 | 2. Altered source versions must be plainly marked as such, and must not be 19 | misrepresented as being the original software. 20 | 3. This notice may not be removed or altered from any source distribution. 21 | 22 | Jean-loup Gailly Mark Adler 23 | jloup@gzip.org madler@alumni.caltech.edu 24 | 25 | */ 26 | -------------------------------------------------------------------------------- /man/Makefile.am: -------------------------------------------------------------------------------- 1 | man1_MANS = spek.1 2 | EXTRA_DIST = spek.1 -------------------------------------------------------------------------------- /man/spek.1: -------------------------------------------------------------------------------- 1 | .TH SPEK-X 1 "2023\-01\-26" "User\[aq]s Guide" "Version 0.9.1" 2 | .SH NAME 3 | .PP 4 | Spek-X \- Acoustic Spectrum Analyser 5 | .SH SYNOPSIS 6 | .PP 7 | \f[C]spek\f[] [\f[I]OPTION\f[] \f[I]\&...\f[]] [\f[I]FILE\f[]] [\f[I]PNG\f[]] [\f[I]WIDTH\f[]] [\f[I]HEIGHT\f[]] 8 | .SH DESCRIPTION 9 | .PP 10 | \f[I]Spek-X\f[] generates a spectrogram for the input audio file. 11 | .SH ARGUMENTS 12 | .TP 13 | \f[I]FILE\f[] 14 | Audio file to be analyzed. 15 | .TP 16 | \f[I]PNG\f[] 17 | Write spectrogram to this PNG file then exit. 18 | .TP 19 | \f[I]WIDTH\f[] 20 | Initial width of the spectrum in pixels. 21 | .TP 22 | \f[I]HEIGHT\f[] 23 | Initial height of the spectrum in pixels. 24 | .SH OPTIONS 25 | .TP 26 | .B \f[C]\-h\f[], \f[C]\-\-help\f[] 27 | Output the help message then quit. 28 | .RS 29 | .RE 30 | .TP 31 | .B \f[C]\-V\f[], \f[C]\-\-version\f[] 32 | Output version information then quit. 33 | .RS 34 | .RE 35 | .SH KEYBINDINGS 36 | .SS Notes 37 | .PP 38 | On macOS use the Command key instead of Ctrl. 39 | .SS Menu 40 | .TP 41 | .B \f[C]Ctrl\-O\f[] 42 | Open a new file. 43 | .RS 44 | .RE 45 | .TP 46 | .B \f[C]Ctrl\-S\f[] 47 | Save the spectrogram as an image file. 48 | .RS 49 | .RE 50 | .TP 51 | .B \f[C]Ctrl\-E\f[] 52 | Show the preferences dialog. 53 | .RS 54 | .RE 55 | .TP 56 | .B \f[C]F1\f[] 57 | Open online manual in the browser. 58 | .RS 59 | .RE 60 | .TP 61 | .B \f[C]Shift\-F1\f[] 62 | Show the about dialog. 63 | .RS 64 | .RE 65 | .SS Spectrogram 66 | .TP 67 | .B \f[C]c\f[], \f[C]C\f[] 68 | Change the audio channel. 69 | .RS 70 | .RE 71 | .TP 72 | .B \f[C]f\f[], \f[C]F\f[] 73 | Change the DFT window function. 74 | .RS 75 | .RE 76 | .TP 77 | .B \f[C]l\f[], \f[C]L\f[] 78 | Change the lower limit of the dynamic range in dBFS. 79 | .RS 80 | .RE 81 | .TP 82 | .B \f[C]p\f[], \f[C]P\f[] 83 | Change the palette. 84 | .RS 85 | .RE 86 | .TP 87 | .B \f[C]s\f[], \f[C]S\f[] 88 | Change the audio stream. 89 | .RS 90 | .RE 91 | .TP 92 | .B \f[C]u\f[], \f[C]U\f[] 93 | Change the upper limit of the dynamic range in dBFS. 94 | .RS 95 | .RE 96 | .TP 97 | .B \f[C]w\f[], \f[C]W\f[] 98 | Change the DFT window size. 99 | .RS 100 | .RE 101 | .SH FILES 102 | .TP 103 | .B \f[I]~/.config/spek/preferences\f[] 104 | The configuration file for \f[I]Spek-X\f[], stored in a simple INI format. 105 | .RS 106 | .RE 107 | .SH AUTHORS 108 | .PP 109 | Alexander Kojevnikov . 110 | Other contributors are listed in the LICENCE.md file distributed with 111 | the source code. 112 | .SH DISTRIBUTION 113 | .PP 114 | The latest version of \f[I]Spek-X\f[] may be downloaded from 115 | . 116 | -------------------------------------------------------------------------------- /po/LINGUAS: -------------------------------------------------------------------------------- 1 | # please keep this list sorted alphabetically 2 | # 3 | bs 4 | ca 5 | cs 6 | da 7 | de 8 | el 9 | eo 10 | es 11 | fi 12 | fr 13 | gl 14 | he 15 | hu 16 | id 17 | it 18 | ja 19 | ko 20 | lv 21 | nb 22 | nl 23 | pl 24 | pt_BR 25 | ru 26 | sk 27 | sr@latin 28 | sv 29 | th 30 | tr 31 | uk 32 | vi 33 | zh_CN 34 | zh_TW 35 | -------------------------------------------------------------------------------- /po/POTFILES.in: -------------------------------------------------------------------------------- 1 | [encoding: UTF-8] 2 | data/spek.desktop.in.in 3 | src/spek-pipeline.cc 4 | src/spek-preferences-dialog.cc 5 | src/spek-spectrogram.cc 6 | src/spek-window.cc 7 | src/spek.cc 8 | -------------------------------------------------------------------------------- /po/POTFILES.skip: -------------------------------------------------------------------------------- 1 | data/spek.desktop.in 2 | -------------------------------------------------------------------------------- /po/da.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # Alexander Kojevnikov , 2012 7 | # nbca , 2012 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: Spek\n" 11 | "Report-Msgid-Bugs-To: \n" 12 | "POT-Creation-Date: 2014-03-29 13:05-0700\n" 13 | "PO-Revision-Date: 2017-09-19 13:48+0000\n" 14 | "Last-Translator: Alexander Kojevnikov \n" 15 | "Language-Team: Danish (http://www.transifex.com/spek/spek/language/da/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: da\n" 20 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 21 | 22 | #: ../data/spek.desktop.in.in.h:1 23 | msgid "Spek" 24 | msgstr "Spek" 25 | 26 | #: ../data/spek.desktop.in.in.h:2 27 | msgid "Spectrum Analyser" 28 | msgstr "Spektrum analysator" 29 | 30 | #: ../data/spek.desktop.in.in.h:3 31 | msgid "View spectrograms of your audio files" 32 | msgstr "Vis spektrogrammer af dine lydfiler" 33 | 34 | #: ../data/spek.desktop.in.in.h:4 35 | msgid "Spek Spectrum Analyser" 36 | msgstr "Spek Spektrum Analysator" 37 | 38 | #: ../src/spek-pipeline.cc:197 39 | #, c-format 40 | msgid "%d kbps" 41 | msgstr "%d kbps" 42 | 43 | #: ../src/spek-pipeline.cc:202 44 | #, c-format 45 | msgid "%d Hz" 46 | msgstr "%d Hz" 47 | 48 | #: ../src/spek-pipeline.cc:209 49 | #, c-format 50 | msgid "%d bit" 51 | msgid_plural "%d bits" 52 | msgstr[0] "%d bit" 53 | msgstr[1] "%d bits" 54 | 55 | #: ../src/spek-pipeline.cc:217 56 | #, c-format 57 | msgid "%d channel" 58 | msgid_plural "%d channels" 59 | msgstr[0] "%d kanal" 60 | msgstr[1] "%d kanaler" 61 | 62 | #: ../src/spek-pipeline.cc:234 63 | msgid "Cannot open input file" 64 | msgstr "Kan ikke åbne filen" 65 | 66 | #: ../src/spek-pipeline.cc:237 67 | msgid "Cannot find stream info" 68 | msgstr "Kan ikke finde oplysninger om lydfil" 69 | 70 | #: ../src/spek-pipeline.cc:240 71 | msgid "The file contains no audio streams" 72 | msgstr "Denne fil indeholder ingen lyd" 73 | 74 | #: ../src/spek-pipeline.cc:243 75 | msgid "Cannot find decoder" 76 | msgstr "Kan ikke finde afkoder" 77 | 78 | #: ../src/spek-pipeline.cc:246 79 | msgid "Unknown duration" 80 | msgstr "Ukendt varighed" 81 | 82 | #: ../src/spek-pipeline.cc:249 83 | msgid "No audio channels" 84 | msgstr "Ingen lydkanaler" 85 | 86 | #: ../src/spek-pipeline.cc:252 87 | msgid "Cannot open decoder" 88 | msgstr "Kan ikke åbne afkoder" 89 | 90 | #: ../src/spek-pipeline.cc:255 91 | msgid "Unsupported sample format" 92 | msgstr "Ikke-understøttet lydformat" 93 | 94 | #. TRANSLATORS: first %s is the error message, second %s is stream 95 | #. description. 96 | #: ../src/spek-pipeline.cc:267 97 | #, c-format 98 | msgid "%s: %s" 99 | msgstr "%s: %s" 100 | 101 | #: ../src/spek-preferences-dialog.cc:67 102 | msgid "Preferences" 103 | msgstr "Præferencer" 104 | 105 | #: ../src/spek-preferences-dialog.cc:72 106 | msgid "(system default)" 107 | msgstr "(system standard)" 108 | 109 | #. TRANSLATORS: The name of a section in the Preferences dialog. 110 | #: ../src/spek-preferences-dialog.cc:79 111 | msgid "General" 112 | msgstr "Det meste" 113 | 114 | #: ../src/spek-preferences-dialog.cc:88 115 | msgid "Language:" 116 | msgstr "Sprog:" 117 | 118 | #: ../src/spek-preferences-dialog.cc:104 119 | msgid "Check for &updates" 120 | msgstr "Tjek for &updates" 121 | 122 | #: ../src/spek-spectrogram.cc:191 123 | #, c-format 124 | msgid "%d kHz" 125 | msgstr "%d kHz" 126 | 127 | #: ../src/spek-spectrogram.cc:196 128 | #, c-format 129 | msgid "%d dB" 130 | msgstr "%d dB" 131 | 132 | #. TRANSLATORS: keep "00" unchanged, it's used to calc the text width 133 | #: ../src/spek-spectrogram.cc:302 134 | msgid "00 kHz" 135 | msgstr "00 kHz" 136 | 137 | #. TRANSLATORS: keep "-00" unchanged, it's used to calc the text width 138 | #: ../src/spek-spectrogram.cc:333 139 | msgid "-00 dB" 140 | msgstr "-00 dB" 141 | 142 | #: ../src/spek-window.cc:75 143 | msgid "Spek - Acoustic Spectrum Analyser" 144 | msgstr "Spek - akustisk spectrum analysator" 145 | 146 | #: ../src/spek-window.cc:91 147 | msgid "&File" 148 | msgstr "&Fil" 149 | 150 | #: ../src/spek-window.cc:97 151 | msgid "&Edit" 152 | msgstr "&Redigér" 153 | 154 | #: ../src/spek-window.cc:101 ../src/spek-window.cc:106 155 | msgid "&Help" 156 | msgstr "&Hjælp" 157 | 158 | #: ../src/spek-window.cc:128 159 | msgid "Help" 160 | msgstr "Hjælp" 161 | 162 | #: ../src/spek-window.cc:141 163 | msgid "A new version of Spek is available, click to download." 164 | msgstr "En ny version af Spek er tilgængelig, tryk her for at downloade." 165 | 166 | #. TRANSLATORS: window title, %s is replaced with the file name 167 | #: ../src/spek-window.cc:179 168 | #, c-format 169 | msgid "Spek - %s" 170 | msgstr "Spek - %s" 171 | 172 | #: ../src/spek-window.cc:226 173 | msgid "All files" 174 | msgstr "Alle filer" 175 | 176 | #: ../src/spek-window.cc:228 177 | msgid "Audio files" 178 | msgstr "Lydfiler" 179 | 180 | #: ../src/spek-window.cc:242 181 | msgid "Open File" 182 | msgstr "Åben fil" 183 | 184 | #: ../src/spek-window.cc:264 185 | msgid "PNG images" 186 | msgstr "PNG billeder" 187 | 188 | #: ../src/spek-window.cc:270 189 | msgid "Save Spectrogram" 190 | msgstr "Gem spektrogram" 191 | 192 | #. Suggested name is .png 193 | #: ../src/spek-window.cc:278 194 | msgid "Untitled" 195 | msgstr "Ikke-navngivet" 196 | 197 | #. TRANSLATORS: Add your name here 198 | #: ../src/spek-window.cc:325 199 | msgid "translator-credits" 200 | msgstr "nbca" 201 | 202 | #: ../src/spek-window.cc:331 203 | msgid "Copyright (c) 2010-2013 Alexander Kojevnikov and contributors" 204 | msgstr "Copyright (c) 2010-2013 Alexander Kojevnikov and bidragsydere" 205 | 206 | #: ../src/spek-window.cc:334 207 | msgid "Spek Website" 208 | msgstr "Spek hjemmeside" 209 | 210 | #. TRANSLATORS: the %s is the package version. 211 | #: ../src/spek.cc:94 212 | #, c-format 213 | msgid "Spek version %s" 214 | msgstr "Spek version %s" 215 | -------------------------------------------------------------------------------- /po/fi.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # Tero Talvio, 2013 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: Spek\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2014-03-29 13:05-0700\n" 12 | "PO-Revision-Date: 2017-09-19 19:46+0000\n" 13 | "Last-Translator: Tero Talvio\n" 14 | "Language-Team: Finnish (http://www.transifex.com/spek/spek/language/fi/)\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Language: fi\n" 19 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 20 | 21 | #: ../data/spek.desktop.in.in.h:1 22 | msgid "Spek" 23 | msgstr "Spek" 24 | 25 | #: ../data/spek.desktop.in.in.h:2 26 | msgid "Spectrum Analyser" 27 | msgstr "Spektrianalysaattori" 28 | 29 | #: ../data/spek.desktop.in.in.h:3 30 | msgid "View spectrograms of your audio files" 31 | msgstr "Tarkastele äänitiedostojesi spektrogrammeja" 32 | 33 | #: ../data/spek.desktop.in.in.h:4 34 | msgid "Spek Spectrum Analyser" 35 | msgstr "Spek Spektrianalysaattori" 36 | 37 | #: ../src/spek-pipeline.cc:197 38 | #, c-format 39 | msgid "%d kbps" 40 | msgstr "%d kbps" 41 | 42 | #: ../src/spek-pipeline.cc:202 43 | #, c-format 44 | msgid "%d Hz" 45 | msgstr "%d Hz" 46 | 47 | #: ../src/spek-pipeline.cc:209 48 | #, c-format 49 | msgid "%d bit" 50 | msgid_plural "%d bits" 51 | msgstr[0] "%d bittiä" 52 | msgstr[1] "%d bittiä" 53 | 54 | #: ../src/spek-pipeline.cc:217 55 | #, c-format 56 | msgid "%d channel" 57 | msgid_plural "%d channels" 58 | msgstr[0] "%d kanava" 59 | msgstr[1] "%d kanavaa" 60 | 61 | #: ../src/spek-pipeline.cc:234 62 | msgid "Cannot open input file" 63 | msgstr "Syötetiedostoa ei voida avata" 64 | 65 | #: ../src/spek-pipeline.cc:237 66 | msgid "Cannot find stream info" 67 | msgstr "Äänidatan tietoja ei löydy" 68 | 69 | #: ../src/spek-pipeline.cc:240 70 | msgid "The file contains no audio streams" 71 | msgstr "Tiedosto ei sisällä äänidataa" 72 | 73 | #: ../src/spek-pipeline.cc:243 74 | msgid "Cannot find decoder" 75 | msgstr "Dekooderia ei löydy" 76 | 77 | #: ../src/spek-pipeline.cc:246 78 | msgid "Unknown duration" 79 | msgstr "Kesto tuntematon" 80 | 81 | #: ../src/spek-pipeline.cc:249 82 | msgid "No audio channels" 83 | msgstr "Ei äänikanavia" 84 | 85 | #: ../src/spek-pipeline.cc:252 86 | msgid "Cannot open decoder" 87 | msgstr "Dekooderia ei voida avata" 88 | 89 | #: ../src/spek-pipeline.cc:255 90 | msgid "Unsupported sample format" 91 | msgstr "Näytteen tiedostomuotoa ei tueta" 92 | 93 | #. TRANSLATORS: first %s is the error message, second %s is stream 94 | #. description. 95 | #: ../src/spek-pipeline.cc:267 96 | #, c-format 97 | msgid "%s: %s" 98 | msgstr "%s: %s" 99 | 100 | #: ../src/spek-preferences-dialog.cc:67 101 | msgid "Preferences" 102 | msgstr "Asetukset" 103 | 104 | #: ../src/spek-preferences-dialog.cc:72 105 | msgid "(system default)" 106 | msgstr "(oletusasetus)" 107 | 108 | #. TRANSLATORS: The name of a section in the Preferences dialog. 109 | #: ../src/spek-preferences-dialog.cc:79 110 | msgid "General" 111 | msgstr "Yleiset" 112 | 113 | #: ../src/spek-preferences-dialog.cc:88 114 | msgid "Language:" 115 | msgstr "Kieli:" 116 | 117 | #: ../src/spek-preferences-dialog.cc:104 118 | msgid "Check for &updates" 119 | msgstr "Etsi &päivityksiä" 120 | 121 | #: ../src/spek-spectrogram.cc:191 122 | #, c-format 123 | msgid "%d kHz" 124 | msgstr "%d kHz" 125 | 126 | #: ../src/spek-spectrogram.cc:196 127 | #, c-format 128 | msgid "%d dB" 129 | msgstr "%d dB" 130 | 131 | #. TRANSLATORS: keep "00" unchanged, it's used to calc the text width 132 | #: ../src/spek-spectrogram.cc:302 133 | msgid "00 kHz" 134 | msgstr "00 kHz" 135 | 136 | #. TRANSLATORS: keep "-00" unchanged, it's used to calc the text width 137 | #: ../src/spek-spectrogram.cc:333 138 | msgid "-00 dB" 139 | msgstr "-00 dB" 140 | 141 | #: ../src/spek-window.cc:75 142 | msgid "Spek - Acoustic Spectrum Analyser" 143 | msgstr "Spek - Akustinen Spektrianalysaattori" 144 | 145 | #: ../src/spek-window.cc:91 146 | msgid "&File" 147 | msgstr "&Tiedosto" 148 | 149 | #: ../src/spek-window.cc:97 150 | msgid "&Edit" 151 | msgstr "&Muokkaa" 152 | 153 | #: ../src/spek-window.cc:101 ../src/spek-window.cc:106 154 | msgid "&Help" 155 | msgstr "&Ohje" 156 | 157 | #: ../src/spek-window.cc:128 158 | msgid "Help" 159 | msgstr "Ohje" 160 | 161 | #: ../src/spek-window.cc:141 162 | msgid "A new version of Spek is available, click to download." 163 | msgstr "Uusi versio Spekistä on saatavilla, lataa tästä." 164 | 165 | #. TRANSLATORS: window title, %s is replaced with the file name 166 | #: ../src/spek-window.cc:179 167 | #, c-format 168 | msgid "Spek - %s" 169 | msgstr "Spek - %s" 170 | 171 | #: ../src/spek-window.cc:226 172 | msgid "All files" 173 | msgstr "Kaikki tiedostot" 174 | 175 | #: ../src/spek-window.cc:228 176 | msgid "Audio files" 177 | msgstr "Äänitiedostot" 178 | 179 | #: ../src/spek-window.cc:242 180 | msgid "Open File" 181 | msgstr "Avaa tiedosto" 182 | 183 | #: ../src/spek-window.cc:264 184 | msgid "PNG images" 185 | msgstr "PNG-kuva" 186 | 187 | #: ../src/spek-window.cc:270 188 | msgid "Save Spectrogram" 189 | msgstr "Tallenna spektrogrammi" 190 | 191 | #. Suggested name is .png 192 | #: ../src/spek-window.cc:278 193 | msgid "Untitled" 194 | msgstr "Nimetön" 195 | 196 | #. TRANSLATORS: Add your name here 197 | #: ../src/spek-window.cc:325 198 | msgid "translator-credits" 199 | msgstr "Tero Talvio" 200 | 201 | #: ../src/spek-window.cc:331 202 | msgid "Copyright (c) 2010-2013 Alexander Kojevnikov and contributors" 203 | msgstr "Tekijänoikeuden haltija (c) 2010-2013 Alexander Kojevnikov ja avustajat" 204 | 205 | #: ../src/spek-window.cc:334 206 | msgid "Spek Website" 207 | msgstr "Spek-verkkosivusto" 208 | 209 | #. TRANSLATORS: the %s is the package version. 210 | #: ../src/spek.cc:94 211 | #, c-format 212 | msgid "Spek version %s" 213 | msgstr "Spek versio %s" 214 | -------------------------------------------------------------------------------- /po/he.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # YAKIR RACHMANY , 2014 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: Spek\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2014-03-29 13:05-0700\n" 12 | "PO-Revision-Date: 2017-09-23 20:29+0000\n" 13 | "Last-Translator: YAKIR RACHMANY \n" 14 | "Language-Team: Hebrew (http://www.transifex.com/spek/spek/language/he/)\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Language: he\n" 19 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 20 | 21 | #: ../data/spek.desktop.in.in.h:1 22 | msgid "Spek" 23 | msgstr "Spek" 24 | 25 | #: ../data/spek.desktop.in.in.h:2 26 | msgid "Spectrum Analyser" 27 | msgstr "ספקטרום אנלייזר" 28 | 29 | #: ../data/spek.desktop.in.in.h:3 30 | msgid "View spectrograms of your audio files" 31 | msgstr "הצג ספקטרום מתוך קבצי השמע שלך" 32 | 33 | #: ../data/spek.desktop.in.in.h:4 34 | msgid "Spek Spectrum Analyser" 35 | msgstr "Spek Spectrum Analyser" 36 | 37 | #: ../src/spek-pipeline.cc:197 38 | #, c-format 39 | msgid "%d kbps" 40 | msgstr "%d kbps" 41 | 42 | #: ../src/spek-pipeline.cc:202 43 | #, c-format 44 | msgid "%d Hz" 45 | msgstr "%d Hz" 46 | 47 | #: ../src/spek-pipeline.cc:209 48 | #, c-format 49 | msgid "%d bit" 50 | msgid_plural "%d bits" 51 | msgstr[0] "%d bit" 52 | msgstr[1] "%d bits" 53 | 54 | #: ../src/spek-pipeline.cc:217 55 | #, c-format 56 | msgid "%d channel" 57 | msgid_plural "%d channels" 58 | msgstr[0] "%d channel" 59 | msgstr[1] "%d channels" 60 | 61 | #: ../src/spek-pipeline.cc:234 62 | msgid "Cannot open input file" 63 | msgstr "לא ניתן לפתוח קובץ זה" 64 | 65 | #: ../src/spek-pipeline.cc:237 66 | msgid "Cannot find stream info" 67 | msgstr "לא ניתן למצוא מידע זרימה" 68 | 69 | #: ../src/spek-pipeline.cc:240 70 | msgid "The file contains no audio streams" 71 | msgstr "הקובץ אינו מכיל ערוצי שמע" 72 | 73 | #: ../src/spek-pipeline.cc:243 74 | msgid "Cannot find decoder" 75 | msgstr "לא ניתן למצוא מקודד" 76 | 77 | #: ../src/spek-pipeline.cc:246 78 | msgid "Unknown duration" 79 | msgstr "אורך לא ידוע" 80 | 81 | #: ../src/spek-pipeline.cc:249 82 | msgid "No audio channels" 83 | msgstr "אין ערוצי שמע" 84 | 85 | #: ../src/spek-pipeline.cc:252 86 | msgid "Cannot open decoder" 87 | msgstr "לא ניתן לפתוח קידוד זה" 88 | 89 | #: ../src/spek-pipeline.cc:255 90 | msgid "Unsupported sample format" 91 | msgstr "פורמט דגימה לא נתמך" 92 | 93 | #. TRANSLATORS: first %s is the error message, second %s is stream 94 | #. description. 95 | #: ../src/spek-pipeline.cc:267 96 | #, c-format 97 | msgid "%s: %s" 98 | msgstr "%s: %s" 99 | 100 | #: ../src/spek-preferences-dialog.cc:67 101 | msgid "Preferences" 102 | msgstr "הגדרות" 103 | 104 | #: ../src/spek-preferences-dialog.cc:72 105 | msgid "(system default)" 106 | msgstr "(מערכת ברירת המחדל)" 107 | 108 | #. TRANSLATORS: The name of a section in the Preferences dialog. 109 | #: ../src/spek-preferences-dialog.cc:79 110 | msgid "General" 111 | msgstr "ראשי" 112 | 113 | #: ../src/spek-preferences-dialog.cc:88 114 | msgid "Language:" 115 | msgstr "שפה:" 116 | 117 | #: ../src/spek-preferences-dialog.cc:104 118 | msgid "Check for &updates" 119 | msgstr "בדוק &עדכונים" 120 | 121 | #: ../src/spek-spectrogram.cc:191 122 | #, c-format 123 | msgid "%d kHz" 124 | msgstr "%d kHz" 125 | 126 | #: ../src/spek-spectrogram.cc:196 127 | #, c-format 128 | msgid "%d dB" 129 | msgstr "%d dB" 130 | 131 | #. TRANSLATORS: keep "00" unchanged, it's used to calc the text width 132 | #: ../src/spek-spectrogram.cc:302 133 | msgid "00 kHz" 134 | msgstr "00 kHz" 135 | 136 | #. TRANSLATORS: keep "-00" unchanged, it's used to calc the text width 137 | #: ../src/spek-spectrogram.cc:333 138 | msgid "-00 dB" 139 | msgstr "-00 dB" 140 | 141 | #: ../src/spek-window.cc:75 142 | msgid "Spek - Acoustic Spectrum Analyser" 143 | msgstr "Spek - Acoustic Spectrum Analyser" 144 | 145 | #: ../src/spek-window.cc:91 146 | msgid "&File" 147 | msgstr "&קובץ" 148 | 149 | #: ../src/spek-window.cc:97 150 | msgid "&Edit" 151 | msgstr "&עריכה" 152 | 153 | #: ../src/spek-window.cc:101 ../src/spek-window.cc:106 154 | msgid "&Help" 155 | msgstr "&עזרה" 156 | 157 | #: ../src/spek-window.cc:128 158 | msgid "Help" 159 | msgstr "עזרה" 160 | 161 | #: ../src/spek-window.cc:141 162 | msgid "A new version of Spek is available, click to download." 163 | msgstr "גרסה חדשה זמינה, לחץ להורדה." 164 | 165 | #. TRANSLATORS: window title, %s is replaced with the file name 166 | #: ../src/spek-window.cc:179 167 | #, c-format 168 | msgid "Spek - %s" 169 | msgstr "Spek - %s" 170 | 171 | #: ../src/spek-window.cc:226 172 | msgid "All files" 173 | msgstr "כל הקבצים" 174 | 175 | #: ../src/spek-window.cc:228 176 | msgid "Audio files" 177 | msgstr "קבצי שמע" 178 | 179 | #: ../src/spek-window.cc:242 180 | msgid "Open File" 181 | msgstr "פתח קובץ" 182 | 183 | #: ../src/spek-window.cc:264 184 | msgid "PNG images" 185 | msgstr "תמונות PNG" 186 | 187 | #: ../src/spek-window.cc:270 188 | msgid "Save Spectrogram" 189 | msgstr "שמור ספקטרום" 190 | 191 | #. Suggested name is .png 192 | #: ../src/spek-window.cc:278 193 | msgid "Untitled" 194 | msgstr "ללא כותרת" 195 | 196 | #. TRANSLATORS: Add your name here 197 | #: ../src/spek-window.cc:325 198 | msgid "translator-credits" 199 | msgstr "קרדיטים-למתרגמים" 200 | 201 | #: ../src/spek-window.cc:331 202 | msgid "Copyright (c) 2010-2013 Alexander Kojevnikov and contributors" 203 | msgstr "כל הזכויות שמורות: (c) 2010-2013 \nאלכסנדר קוג'בניקוב והכותבים" 204 | 205 | #: ../src/spek-window.cc:334 206 | msgid "Spek Website" 207 | msgstr "Spek אתר הבית" 208 | 209 | #. TRANSLATORS: the %s is the package version. 210 | #: ../src/spek.cc:94 211 | #, c-format 212 | msgid "Spek version %s" 213 | msgstr "Spek גרסה %s" 214 | -------------------------------------------------------------------------------- /po/id.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # Tan Rico , 2016 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: Spek\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2014-03-29 13:05-0700\n" 12 | "PO-Revision-Date: 2017-09-21 14:32+0000\n" 13 | "Last-Translator: Tan Rico \n" 14 | "Language-Team: Indonesian (http://www.transifex.com/spek/spek/language/id/)\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Language: id\n" 19 | "Plural-Forms: nplurals=1; plural=0;\n" 20 | 21 | #: ../data/spek.desktop.in.in.h:1 22 | msgid "Spek" 23 | msgstr "Spek" 24 | 25 | #: ../data/spek.desktop.in.in.h:2 26 | msgid "Spectrum Analyser" 27 | msgstr "Spectrum Analyser" 28 | 29 | #: ../data/spek.desktop.in.in.h:3 30 | msgid "View spectrograms of your audio files" 31 | msgstr "Tampilkan spektogram dari file audio-mu" 32 | 33 | #: ../data/spek.desktop.in.in.h:4 34 | msgid "Spek Spectrum Analyser" 35 | msgstr "Spek Spectrum Analyser" 36 | 37 | #: ../src/spek-pipeline.cc:197 38 | #, c-format 39 | msgid "%d kbps" 40 | msgstr "%d kbps" 41 | 42 | #: ../src/spek-pipeline.cc:202 43 | #, c-format 44 | msgid "%d Hz" 45 | msgstr "%d Hz" 46 | 47 | #: ../src/spek-pipeline.cc:209 48 | #, c-format 49 | msgid "%d bit" 50 | msgid_plural "%d bits" 51 | msgstr[0] "%d bits" 52 | 53 | #: ../src/spek-pipeline.cc:217 54 | #, c-format 55 | msgid "%d channel" 56 | msgid_plural "%d channels" 57 | msgstr[0] "%d channels" 58 | 59 | #: ../src/spek-pipeline.cc:234 60 | msgid "Cannot open input file" 61 | msgstr "Tidak dapat membuka file masukan" 62 | 63 | #: ../src/spek-pipeline.cc:237 64 | msgid "Cannot find stream info" 65 | msgstr "Tidak dapat menemukan informasi gelombang audio" 66 | 67 | #: ../src/spek-pipeline.cc:240 68 | msgid "The file contains no audio streams" 69 | msgstr "File ini tidak memiliki gelombang audio" 70 | 71 | #: ../src/spek-pipeline.cc:243 72 | msgid "Cannot find decoder" 73 | msgstr "Tidak dapat menemukan decoder" 74 | 75 | #: ../src/spek-pipeline.cc:246 76 | msgid "Unknown duration" 77 | msgstr "Durasi tidak diketahui" 78 | 79 | #: ../src/spek-pipeline.cc:249 80 | msgid "No audio channels" 81 | msgstr "Tidak ada kanal audio" 82 | 83 | #: ../src/spek-pipeline.cc:252 84 | msgid "Cannot open decoder" 85 | msgstr "Tidak dapat membuka decoder" 86 | 87 | #: ../src/spek-pipeline.cc:255 88 | msgid "Unsupported sample format" 89 | msgstr "Sampel format tidak didukung" 90 | 91 | #. TRANSLATORS: first %s is the error message, second %s is stream 92 | #. description. 93 | #: ../src/spek-pipeline.cc:267 94 | #, c-format 95 | msgid "%s: %s" 96 | msgstr "%s: %s" 97 | 98 | #: ../src/spek-preferences-dialog.cc:67 99 | msgid "Preferences" 100 | msgstr "Preferensi" 101 | 102 | #: ../src/spek-preferences-dialog.cc:72 103 | msgid "(system default)" 104 | msgstr "(bawaan sistem)" 105 | 106 | #. TRANSLATORS: The name of a section in the Preferences dialog. 107 | #: ../src/spek-preferences-dialog.cc:79 108 | msgid "General" 109 | msgstr "Umum" 110 | 111 | #: ../src/spek-preferences-dialog.cc:88 112 | msgid "Language:" 113 | msgstr "Bahasa:" 114 | 115 | #: ../src/spek-preferences-dialog.cc:104 116 | msgid "Check for &updates" 117 | msgstr "Cek &pembaharuan" 118 | 119 | #: ../src/spek-spectrogram.cc:191 120 | #, c-format 121 | msgid "%d kHz" 122 | msgstr "%d kHz" 123 | 124 | #: ../src/spek-spectrogram.cc:196 125 | #, c-format 126 | msgid "%d dB" 127 | msgstr "%d dB" 128 | 129 | #. TRANSLATORS: keep "00" unchanged, it's used to calc the text width 130 | #: ../src/spek-spectrogram.cc:302 131 | msgid "00 kHz" 132 | msgstr "00 kHz" 133 | 134 | #. TRANSLATORS: keep "-00" unchanged, it's used to calc the text width 135 | #: ../src/spek-spectrogram.cc:333 136 | msgid "-00 dB" 137 | msgstr "-00 dB" 138 | 139 | #: ../src/spek-window.cc:75 140 | msgid "Spek - Acoustic Spectrum Analyser" 141 | msgstr "Spek - Acoustic Spectrum Analyser" 142 | 143 | #: ../src/spek-window.cc:91 144 | msgid "&File" 145 | msgstr "&File" 146 | 147 | #: ../src/spek-window.cc:97 148 | msgid "&Edit" 149 | msgstr "&Edit" 150 | 151 | #: ../src/spek-window.cc:101 ../src/spek-window.cc:106 152 | msgid "&Help" 153 | msgstr "&Bantuan" 154 | 155 | #: ../src/spek-window.cc:128 156 | msgid "Help" 157 | msgstr "Bantuan" 158 | 159 | #: ../src/spek-window.cc:141 160 | msgid "A new version of Spek is available, click to download." 161 | msgstr "Versi terbaru Spek ditemukan, klik untuk mengunduh." 162 | 163 | #. TRANSLATORS: window title, %s is replaced with the file name 164 | #: ../src/spek-window.cc:179 165 | #, c-format 166 | msgid "Spek - %s" 167 | msgstr "Spek - %s" 168 | 169 | #: ../src/spek-window.cc:226 170 | msgid "All files" 171 | msgstr "Semua file" 172 | 173 | #: ../src/spek-window.cc:228 174 | msgid "Audio files" 175 | msgstr "File Audio" 176 | 177 | #: ../src/spek-window.cc:242 178 | msgid "Open File" 179 | msgstr "Buka File" 180 | 181 | #: ../src/spek-window.cc:264 182 | msgid "PNG images" 183 | msgstr "Gambar PNG" 184 | 185 | #: ../src/spek-window.cc:270 186 | msgid "Save Spectrogram" 187 | msgstr "Simpan Spektogram" 188 | 189 | #. Suggested name is .png 190 | #: ../src/spek-window.cc:278 191 | msgid "Untitled" 192 | msgstr "Tidak ada judul" 193 | 194 | #. TRANSLATORS: Add your name here 195 | #: ../src/spek-window.cc:325 196 | msgid "translator-credits" 197 | msgstr "translator-credits" 198 | 199 | #: ../src/spek-window.cc:331 200 | msgid "Copyright (c) 2010-2013 Alexander Kojevnikov and contributors" 201 | msgstr "Hak Cipta (c) 2010-2013 Alexander Kojevnikov dan para kontributor" 202 | 203 | #: ../src/spek-window.cc:334 204 | msgid "Spek Website" 205 | msgstr "Laman Website Spek" 206 | 207 | #. TRANSLATORS: the %s is the package version. 208 | #: ../src/spek.cc:94 209 | #, c-format 210 | msgid "Spek version %s" 211 | msgstr "Spek versi %s" 212 | -------------------------------------------------------------------------------- /po/ja.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # Alexander Kojevnikov , 2012 7 | # AmishGramish , 2014 8 | # Lioncash , 2012 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: Spek\n" 12 | "Report-Msgid-Bugs-To: \n" 13 | "POT-Creation-Date: 2014-03-29 13:05-0700\n" 14 | "PO-Revision-Date: 2017-09-19 11:23+0000\n" 15 | "Last-Translator: AmishGramish \n" 16 | "Language-Team: Japanese (http://www.transifex.com/spek/spek/language/ja/)\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Language: ja\n" 21 | "Plural-Forms: nplurals=1; plural=0;\n" 22 | 23 | #: ../data/spek.desktop.in.in.h:1 24 | msgid "Spek" 25 | msgstr "Spek" 26 | 27 | #: ../data/spek.desktop.in.in.h:2 28 | msgid "Spectrum Analyser" 29 | msgstr "スペクトラムアナライザ" 30 | 31 | #: ../data/spek.desktop.in.in.h:3 32 | msgid "View spectrograms of your audio files" 33 | msgstr "オーディオファイルのスペクトログラムを表示します。" 34 | 35 | #: ../data/spek.desktop.in.in.h:4 36 | msgid "Spek Spectrum Analyser" 37 | msgstr "Spek スペクトラムアナライザ" 38 | 39 | #: ../src/spek-pipeline.cc:197 40 | #, c-format 41 | msgid "%d kbps" 42 | msgstr "%d kbps" 43 | 44 | #: ../src/spek-pipeline.cc:202 45 | #, c-format 46 | msgid "%d Hz" 47 | msgstr "%d Hz" 48 | 49 | #: ../src/spek-pipeline.cc:209 50 | #, c-format 51 | msgid "%d bit" 52 | msgid_plural "%d bits" 53 | msgstr[0] "%d ビット" 54 | 55 | #: ../src/spek-pipeline.cc:217 56 | #, c-format 57 | msgid "%d channel" 58 | msgid_plural "%d channels" 59 | msgstr[0] "%d チャンネル" 60 | 61 | #: ../src/spek-pipeline.cc:234 62 | msgid "Cannot open input file" 63 | msgstr "入力ファイルを開くことができません。" 64 | 65 | #: ../src/spek-pipeline.cc:237 66 | msgid "Cannot find stream info" 67 | msgstr "ストリームの情報を見つけることができません。" 68 | 69 | #: ../src/spek-pipeline.cc:240 70 | msgid "The file contains no audio streams" 71 | msgstr "ファイルは、オーディオストリームが含まれていません。" 72 | 73 | #: ../src/spek-pipeline.cc:243 74 | msgid "Cannot find decoder" 75 | msgstr "デコーダを見つけることができません。" 76 | 77 | #: ../src/spek-pipeline.cc:246 78 | msgid "Unknown duration" 79 | msgstr "不明期間" 80 | 81 | #: ../src/spek-pipeline.cc:249 82 | msgid "No audio channels" 83 | msgstr "オーディオチャンネルはありません。" 84 | 85 | #: ../src/spek-pipeline.cc:252 86 | msgid "Cannot open decoder" 87 | msgstr "デコーダを開くことができません。" 88 | 89 | #: ../src/spek-pipeline.cc:255 90 | msgid "Unsupported sample format" 91 | msgstr "サポートされていないサンプル形式。" 92 | 93 | #. TRANSLATORS: first %s is the error message, second %s is stream 94 | #. description. 95 | #: ../src/spek-pipeline.cc:267 96 | #, c-format 97 | msgid "%s: %s" 98 | msgstr "%s: %s" 99 | 100 | #: ../src/spek-preferences-dialog.cc:67 101 | msgid "Preferences" 102 | msgstr "設定" 103 | 104 | #: ../src/spek-preferences-dialog.cc:72 105 | msgid "(system default)" 106 | msgstr "(システムのデフォルト)" 107 | 108 | #. TRANSLATORS: The name of a section in the Preferences dialog. 109 | #: ../src/spek-preferences-dialog.cc:79 110 | msgid "General" 111 | msgstr "ジェネラル" 112 | 113 | #: ../src/spek-preferences-dialog.cc:88 114 | msgid "Language:" 115 | msgstr "言語:" 116 | 117 | #: ../src/spek-preferences-dialog.cc:104 118 | msgid "Check for &updates" 119 | msgstr "更新をチェックする" 120 | 121 | #: ../src/spek-spectrogram.cc:191 122 | #, c-format 123 | msgid "%d kHz" 124 | msgstr "%d kHz" 125 | 126 | #: ../src/spek-spectrogram.cc:196 127 | #, c-format 128 | msgid "%d dB" 129 | msgstr "%d dB" 130 | 131 | #. TRANSLATORS: keep "00" unchanged, it's used to calc the text width 132 | #: ../src/spek-spectrogram.cc:302 133 | msgid "00 kHz" 134 | msgstr "00 kHz" 135 | 136 | #. TRANSLATORS: keep "-00" unchanged, it's used to calc the text width 137 | #: ../src/spek-spectrogram.cc:333 138 | msgid "-00 dB" 139 | msgstr "-00 dB" 140 | 141 | #: ../src/spek-window.cc:75 142 | msgid "Spek - Acoustic Spectrum Analyser" 143 | msgstr "Spek - 音響スペクトラムアナライザ" 144 | 145 | #: ../src/spek-window.cc:91 146 | msgid "&File" 147 | msgstr "&ファイル" 148 | 149 | #: ../src/spek-window.cc:97 150 | msgid "&Edit" 151 | msgstr "&編集" 152 | 153 | #: ../src/spek-window.cc:101 ../src/spek-window.cc:106 154 | msgid "&Help" 155 | msgstr "&ヘルプ" 156 | 157 | #: ../src/spek-window.cc:128 158 | msgid "Help" 159 | msgstr "ヘルプ" 160 | 161 | #: ../src/spek-window.cc:141 162 | msgid "A new version of Spek is available, click to download." 163 | msgstr "Spekの新しいバージョンが利用可能です。クリックしてダウンロード。" 164 | 165 | #. TRANSLATORS: window title, %s is replaced with the file name 166 | #: ../src/spek-window.cc:179 167 | #, c-format 168 | msgid "Spek - %s" 169 | msgstr "Spek - %s" 170 | 171 | #: ../src/spek-window.cc:226 172 | msgid "All files" 173 | msgstr "すべてのファイル" 174 | 175 | #: ../src/spek-window.cc:228 176 | msgid "Audio files" 177 | msgstr "オーディオファイル" 178 | 179 | #: ../src/spek-window.cc:242 180 | msgid "Open File" 181 | msgstr "ファイル開く" 182 | 183 | #: ../src/spek-window.cc:264 184 | msgid "PNG images" 185 | msgstr "PNG画像" 186 | 187 | #: ../src/spek-window.cc:270 188 | msgid "Save Spectrogram" 189 | msgstr "スペクトログラム保存" 190 | 191 | #. Suggested name is .png 192 | #: ../src/spek-window.cc:278 193 | msgid "Untitled" 194 | msgstr "無題" 195 | 196 | #. TRANSLATORS: Add your name here 197 | #: ../src/spek-window.cc:325 198 | msgid "translator-credits" 199 | msgstr "Lioncash, AmishGramish" 200 | 201 | #: ../src/spek-window.cc:331 202 | msgid "Copyright (c) 2010-2013 Alexander Kojevnikov and contributors" 203 | msgstr "著作権 (c) 2010-2013 Alexander Kojevnikovと貢献者" 204 | 205 | #: ../src/spek-window.cc:334 206 | msgid "Spek Website" 207 | msgstr "Spekのウェブサイト" 208 | 209 | #. TRANSLATORS: the %s is the package version. 210 | #: ../src/spek.cc:94 211 | #, c-format 212 | msgid "Spek version %s" 213 | msgstr "Spek バージョン %s" 214 | -------------------------------------------------------------------------------- /po/ko.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # Dae-Seok Kim , 2017 7 | # Zames Dean , 2014 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: Spek\n" 11 | "Report-Msgid-Bugs-To: \n" 12 | "POT-Creation-Date: 2014-03-29 13:05-0700\n" 13 | "PO-Revision-Date: 2017-09-21 14:32+0000\n" 14 | "Last-Translator: Dae-Seok Kim \n" 15 | "Language-Team: Korean (http://www.transifex.com/spek/spek/language/ko/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: ko\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | #: ../data/spek.desktop.in.in.h:1 23 | msgid "Spek" 24 | msgstr "Spek" 25 | 26 | #: ../data/spek.desktop.in.in.h:2 27 | msgid "Spectrum Analyser" 28 | msgstr "스펙트럼 분석기" 29 | 30 | #: ../data/spek.desktop.in.in.h:3 31 | msgid "View spectrograms of your audio files" 32 | msgstr "오디오 파일의 스펙트로그램을 봅니다." 33 | 34 | #: ../data/spek.desktop.in.in.h:4 35 | msgid "Spek Spectrum Analyser" 36 | msgstr "Spek 스펙트럼 분석기" 37 | 38 | #: ../src/spek-pipeline.cc:197 39 | #, c-format 40 | msgid "%d kbps" 41 | msgstr "%d kbps" 42 | 43 | #: ../src/spek-pipeline.cc:202 44 | #, c-format 45 | msgid "%d Hz" 46 | msgstr "%d Hz" 47 | 48 | #: ../src/spek-pipeline.cc:209 49 | #, c-format 50 | msgid "%d bit" 51 | msgid_plural "%d bits" 52 | msgstr[0] "%d bits" 53 | 54 | #: ../src/spek-pipeline.cc:217 55 | #, c-format 56 | msgid "%d channel" 57 | msgid_plural "%d channels" 58 | msgstr[0] "%d 개 채널" 59 | 60 | #: ../src/spek-pipeline.cc:234 61 | msgid "Cannot open input file" 62 | msgstr "입력 파일을 열 수 없습니다." 63 | 64 | #: ../src/spek-pipeline.cc:237 65 | msgid "Cannot find stream info" 66 | msgstr "스트림 정보를 찾을 수 없습니다." 67 | 68 | #: ../src/spek-pipeline.cc:240 69 | msgid "The file contains no audio streams" 70 | msgstr "파일에 오디오 스트림이 포함돼 있지 않습니다." 71 | 72 | #: ../src/spek-pipeline.cc:243 73 | msgid "Cannot find decoder" 74 | msgstr "디코더를 찾을 수 없습니다." 75 | 76 | #: ../src/spek-pipeline.cc:246 77 | msgid "Unknown duration" 78 | msgstr "재생 시간을 알 수 없습니다." 79 | 80 | #: ../src/spek-pipeline.cc:249 81 | msgid "No audio channels" 82 | msgstr "오디오 채널이 없습니다." 83 | 84 | #: ../src/spek-pipeline.cc:252 85 | msgid "Cannot open decoder" 86 | msgstr "디코더를 열 수 없습니다." 87 | 88 | #: ../src/spek-pipeline.cc:255 89 | msgid "Unsupported sample format" 90 | msgstr "지원하지 않는 샘플 형식입니다." 91 | 92 | #. TRANSLATORS: first %s is the error message, second %s is stream 93 | #. description. 94 | #: ../src/spek-pipeline.cc:267 95 | #, c-format 96 | msgid "%s: %s" 97 | msgstr "%s: %s" 98 | 99 | #: ../src/spek-preferences-dialog.cc:67 100 | msgid "Preferences" 101 | msgstr "환경 설정" 102 | 103 | #: ../src/spek-preferences-dialog.cc:72 104 | msgid "(system default)" 105 | msgstr "(시스템 기본값)" 106 | 107 | #. TRANSLATORS: The name of a section in the Preferences dialog. 108 | #: ../src/spek-preferences-dialog.cc:79 109 | msgid "General" 110 | msgstr "일반" 111 | 112 | #: ../src/spek-preferences-dialog.cc:88 113 | msgid "Language:" 114 | msgstr "언어(Language):" 115 | 116 | #: ../src/spek-preferences-dialog.cc:104 117 | msgid "Check for &updates" 118 | msgstr "업데이트 확인(&U)" 119 | 120 | #: ../src/spek-spectrogram.cc:191 121 | #, c-format 122 | msgid "%d kHz" 123 | msgstr "%d kHz" 124 | 125 | #: ../src/spek-spectrogram.cc:196 126 | #, c-format 127 | msgid "%d dB" 128 | msgstr "%d dB" 129 | 130 | #. TRANSLATORS: keep "00" unchanged, it's used to calc the text width 131 | #: ../src/spek-spectrogram.cc:302 132 | msgid "00 kHz" 133 | msgstr "00 kHz" 134 | 135 | #. TRANSLATORS: keep "-00" unchanged, it's used to calc the text width 136 | #: ../src/spek-spectrogram.cc:333 137 | msgid "-00 dB" 138 | msgstr "-00 dB" 139 | 140 | #: ../src/spek-window.cc:75 141 | msgid "Spek - Acoustic Spectrum Analyser" 142 | msgstr "Spek - 음향 스펙트럼 분석기" 143 | 144 | #: ../src/spek-window.cc:91 145 | msgid "&File" 146 | msgstr "파일(&F)" 147 | 148 | #: ../src/spek-window.cc:97 149 | msgid "&Edit" 150 | msgstr "편집(&E)" 151 | 152 | #: ../src/spek-window.cc:101 ../src/spek-window.cc:106 153 | msgid "&Help" 154 | msgstr "도움말(&H)" 155 | 156 | #: ../src/spek-window.cc:128 157 | msgid "Help" 158 | msgstr "도움말" 159 | 160 | #: ../src/spek-window.cc:141 161 | msgid "A new version of Spek is available, click to download." 162 | msgstr "Spek의 새 버전이 사용 가능합니다, 다운로드하려면 누르세요." 163 | 164 | #. TRANSLATORS: window title, %s is replaced with the file name 165 | #: ../src/spek-window.cc:179 166 | #, c-format 167 | msgid "Spek - %s" 168 | msgstr "Spek - %s" 169 | 170 | #: ../src/spek-window.cc:226 171 | msgid "All files" 172 | msgstr "모든 파일" 173 | 174 | #: ../src/spek-window.cc:228 175 | msgid "Audio files" 176 | msgstr "오디오 파일" 177 | 178 | #: ../src/spek-window.cc:242 179 | msgid "Open File" 180 | msgstr "파일 열기" 181 | 182 | #: ../src/spek-window.cc:264 183 | msgid "PNG images" 184 | msgstr "PNG 이미지" 185 | 186 | #: ../src/spek-window.cc:270 187 | msgid "Save Spectrogram" 188 | msgstr "스펙트로그램 저장" 189 | 190 | #. Suggested name is .png 191 | #: ../src/spek-window.cc:278 192 | msgid "Untitled" 193 | msgstr "제목 없음" 194 | 195 | #. TRANSLATORS: Add your name here 196 | #: ../src/spek-window.cc:325 197 | msgid "translator-credits" 198 | msgstr "4Li, 큰돌" 199 | 200 | #: ../src/spek-window.cc:331 201 | msgid "Copyright (c) 2010-2013 Alexander Kojevnikov and contributors" 202 | msgstr "저작권 (c) 2010-2013 Alexander Kojevnikov 와 공헌자들" 203 | 204 | #: ../src/spek-window.cc:334 205 | msgid "Spek Website" 206 | msgstr "Spek 웹사이트" 207 | 208 | #. TRANSLATORS: the %s is the package version. 209 | #: ../src/spek.cc:94 210 | #, c-format 211 | msgid "Spek version %s" 212 | msgstr "Spek 버전 %s" 213 | -------------------------------------------------------------------------------- /po/nb.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # Alexander Kojevnikov , 2013 7 | # Even Gabrielsen , 2012 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: Spek\n" 11 | "Report-Msgid-Bugs-To: \n" 12 | "POT-Creation-Date: 2014-03-29 13:05-0700\n" 13 | "PO-Revision-Date: 2017-09-19 14:25+0000\n" 14 | "Last-Translator: Alexander Kojevnikov \n" 15 | "Language-Team: Norwegian Bokmål (http://www.transifex.com/spek/spek/language/nb/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: nb\n" 20 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 21 | 22 | #: ../data/spek.desktop.in.in.h:1 23 | msgid "Spek" 24 | msgstr "Spek" 25 | 26 | #: ../data/spek.desktop.in.in.h:2 27 | msgid "Spectrum Analyser" 28 | msgstr "Spekter Analysator" 29 | 30 | #: ../data/spek.desktop.in.in.h:3 31 | msgid "View spectrograms of your audio files" 32 | msgstr "Vis spektogram av dine lyd filer" 33 | 34 | #: ../data/spek.desktop.in.in.h:4 35 | msgid "Spek Spectrum Analyser" 36 | msgstr "Spek Spektrum Analysator" 37 | 38 | #: ../src/spek-pipeline.cc:197 39 | #, c-format 40 | msgid "%d kbps" 41 | msgstr "%d kbps" 42 | 43 | #: ../src/spek-pipeline.cc:202 44 | #, c-format 45 | msgid "%d Hz" 46 | msgstr "%d Hz" 47 | 48 | #: ../src/spek-pipeline.cc:209 49 | #, c-format 50 | msgid "%d bit" 51 | msgid_plural "%d bits" 52 | msgstr[0] "%d bit" 53 | msgstr[1] "%d biter" 54 | 55 | #: ../src/spek-pipeline.cc:217 56 | #, c-format 57 | msgid "%d channel" 58 | msgid_plural "%d channels" 59 | msgstr[0] "%d kanal" 60 | msgstr[1] "%d kanaler" 61 | 62 | #: ../src/spek-pipeline.cc:234 63 | msgid "Cannot open input file" 64 | msgstr "Kan ikke åpne input fil" 65 | 66 | #: ../src/spek-pipeline.cc:237 67 | msgid "Cannot find stream info" 68 | msgstr "Kan ikke finne informasjon om denne strømmen" 69 | 70 | #: ../src/spek-pipeline.cc:240 71 | msgid "The file contains no audio streams" 72 | msgstr "Filen inneholder ingen lyd strømmer" 73 | 74 | #: ../src/spek-pipeline.cc:243 75 | msgid "Cannot find decoder" 76 | msgstr "Kan ikke finne dekoder" 77 | 78 | #: ../src/spek-pipeline.cc:246 79 | msgid "Unknown duration" 80 | msgstr "Ukjent fil lengde " 81 | 82 | #: ../src/spek-pipeline.cc:249 83 | msgid "No audio channels" 84 | msgstr "Ingen lyd kanaler" 85 | 86 | #: ../src/spek-pipeline.cc:252 87 | msgid "Cannot open decoder" 88 | msgstr "Kan ikke åpne dekoder" 89 | 90 | #: ../src/spek-pipeline.cc:255 91 | msgid "Unsupported sample format" 92 | msgstr "Ustøttet filformat" 93 | 94 | #. TRANSLATORS: first %s is the error message, second %s is stream 95 | #. description. 96 | #: ../src/spek-pipeline.cc:267 97 | #, c-format 98 | msgid "%s: %s" 99 | msgstr "%s: %s" 100 | 101 | #: ../src/spek-preferences-dialog.cc:67 102 | msgid "Preferences" 103 | msgstr "Instillinger" 104 | 105 | #: ../src/spek-preferences-dialog.cc:72 106 | msgid "(system default)" 107 | msgstr "(system standard)" 108 | 109 | #. TRANSLATORS: The name of a section in the Preferences dialog. 110 | #: ../src/spek-preferences-dialog.cc:79 111 | msgid "General" 112 | msgstr "Generelt" 113 | 114 | #: ../src/spek-preferences-dialog.cc:88 115 | msgid "Language:" 116 | msgstr "Språk:" 117 | 118 | #: ../src/spek-preferences-dialog.cc:104 119 | msgid "Check for &updates" 120 | msgstr "Sjekk for &oppdateringer" 121 | 122 | #: ../src/spek-spectrogram.cc:191 123 | #, c-format 124 | msgid "%d kHz" 125 | msgstr "%d kHz" 126 | 127 | #: ../src/spek-spectrogram.cc:196 128 | #, c-format 129 | msgid "%d dB" 130 | msgstr "%d dB" 131 | 132 | #. TRANSLATORS: keep "00" unchanged, it's used to calc the text width 133 | #: ../src/spek-spectrogram.cc:302 134 | msgid "00 kHz" 135 | msgstr "00 kHz" 136 | 137 | #. TRANSLATORS: keep "-00" unchanged, it's used to calc the text width 138 | #: ../src/spek-spectrogram.cc:333 139 | msgid "-00 dB" 140 | msgstr "-00 dB" 141 | 142 | #: ../src/spek-window.cc:75 143 | msgid "Spek - Acoustic Spectrum Analyser" 144 | msgstr "Spek - Akustisk Spekter Analysator " 145 | 146 | #: ../src/spek-window.cc:91 147 | msgid "&File" 148 | msgstr "&Fil" 149 | 150 | #: ../src/spek-window.cc:97 151 | msgid "&Edit" 152 | msgstr "&Endre" 153 | 154 | #: ../src/spek-window.cc:101 ../src/spek-window.cc:106 155 | msgid "&Help" 156 | msgstr "&Hjelp" 157 | 158 | #: ../src/spek-window.cc:128 159 | msgid "Help" 160 | msgstr "Hjelp" 161 | 162 | #: ../src/spek-window.cc:141 163 | msgid "A new version of Spek is available, click to download." 164 | msgstr "En ny versjon av Spek er tilgjengelig, klikk for å laste ned" 165 | 166 | #. TRANSLATORS: window title, %s is replaced with the file name 167 | #: ../src/spek-window.cc:179 168 | #, c-format 169 | msgid "Spek - %s" 170 | msgstr "Spek - %s" 171 | 172 | #: ../src/spek-window.cc:226 173 | msgid "All files" 174 | msgstr "Alle filer" 175 | 176 | #: ../src/spek-window.cc:228 177 | msgid "Audio files" 178 | msgstr "Lyd filer" 179 | 180 | #: ../src/spek-window.cc:242 181 | msgid "Open File" 182 | msgstr "Åpne fil" 183 | 184 | #: ../src/spek-window.cc:264 185 | msgid "PNG images" 186 | msgstr "PNG bildefiler" 187 | 188 | #: ../src/spek-window.cc:270 189 | msgid "Save Spectrogram" 190 | msgstr "Lagre spektogram" 191 | 192 | #. Suggested name is .png 193 | #: ../src/spek-window.cc:278 194 | msgid "Untitled" 195 | msgstr "Ikke navngitt" 196 | 197 | #. TRANSLATORS: Add your name here 198 | #: ../src/spek-window.cc:325 199 | msgid "translator-credits" 200 | msgstr "Ulykkesnissen" 201 | 202 | #: ../src/spek-window.cc:331 203 | msgid "Copyright (c) 2010-2013 Alexander Kojevnikov and contributors" 204 | msgstr "Kopibeskyttet (c) 2010-2013 Alexander Kojevnikov og kontributører" 205 | 206 | #: ../src/spek-window.cc:334 207 | msgid "Spek Website" 208 | msgstr "Spek nettside" 209 | 210 | #. TRANSLATORS: the %s is the package version. 211 | #: ../src/spek.cc:94 212 | #, c-format 213 | msgid "Spek version %s" 214 | msgstr "Spek versjon %s" 215 | -------------------------------------------------------------------------------- /po/spek.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | #, fuzzy 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: PACKAGE VERSION\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2014-03-29 13:05-0700\n" 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 | "Last-Translator: FULL NAME \n" 14 | "Language-Team: LANGUAGE \n" 15 | "Language: \n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=CHARSET\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" 20 | 21 | #: ../data/spek.desktop.in.in.h:1 22 | msgid "Spek" 23 | msgstr "" 24 | 25 | #: ../data/spek.desktop.in.in.h:2 26 | msgid "Spectrum Analyser" 27 | msgstr "" 28 | 29 | #: ../data/spek.desktop.in.in.h:3 30 | msgid "View spectrograms of your audio files" 31 | msgstr "" 32 | 33 | #: ../data/spek.desktop.in.in.h:4 34 | msgid "Spek Spectrum Analyser" 35 | msgstr "" 36 | 37 | #: ../src/spek-pipeline.cc:197 38 | #, c-format 39 | msgid "%d kbps" 40 | msgstr "" 41 | 42 | #: ../src/spek-pipeline.cc:202 43 | #, c-format 44 | msgid "%d Hz" 45 | msgstr "" 46 | 47 | #: ../src/spek-pipeline.cc:209 48 | #, c-format 49 | msgid "%d bit" 50 | msgid_plural "%d bits" 51 | msgstr[0] "" 52 | msgstr[1] "" 53 | 54 | #: ../src/spek-pipeline.cc:217 55 | #, c-format 56 | msgid "%d channel" 57 | msgid_plural "%d channels" 58 | msgstr[0] "" 59 | msgstr[1] "" 60 | 61 | #: ../src/spek-pipeline.cc:234 62 | msgid "Cannot open input file" 63 | msgstr "" 64 | 65 | #: ../src/spek-pipeline.cc:237 66 | msgid "Cannot find stream info" 67 | msgstr "" 68 | 69 | #: ../src/spek-pipeline.cc:240 70 | msgid "The file contains no audio streams" 71 | msgstr "" 72 | 73 | #: ../src/spek-pipeline.cc:243 74 | msgid "Cannot find decoder" 75 | msgstr "" 76 | 77 | #: ../src/spek-pipeline.cc:246 78 | msgid "Unknown duration" 79 | msgstr "" 80 | 81 | #: ../src/spek-pipeline.cc:249 82 | msgid "No audio channels" 83 | msgstr "" 84 | 85 | #: ../src/spek-pipeline.cc:252 86 | msgid "Cannot open decoder" 87 | msgstr "" 88 | 89 | #: ../src/spek-pipeline.cc:255 90 | msgid "Unsupported sample format" 91 | msgstr "" 92 | 93 | #. TRANSLATORS: first %s is the error message, second %s is stream description. 94 | #: ../src/spek-pipeline.cc:267 95 | #, c-format 96 | msgid "%s: %s" 97 | msgstr "" 98 | 99 | #: ../src/spek-preferences-dialog.cc:67 100 | msgid "Preferences" 101 | msgstr "" 102 | 103 | #: ../src/spek-preferences-dialog.cc:72 104 | msgid "(system default)" 105 | msgstr "" 106 | 107 | #. TRANSLATORS: The name of a section in the Preferences dialog. 108 | #: ../src/spek-preferences-dialog.cc:79 109 | msgid "General" 110 | msgstr "" 111 | 112 | #: ../src/spek-preferences-dialog.cc:88 113 | msgid "Language:" 114 | msgstr "" 115 | 116 | #: ../src/spek-preferences-dialog.cc:104 117 | msgid "Check for &updates" 118 | msgstr "" 119 | 120 | #: ../src/spek-preferences-dialog.cc:99 121 | msgid "Show &filename only" 122 | msgstr "" 123 | 124 | #: ../src/spek-preferences-dialog.cc:105 125 | msgid "Show detailed &description" 126 | msgstr "" 127 | 128 | #: ../src/spek-spectrogram.cc:191 129 | #, c-format 130 | msgid "%d kHz" 131 | msgstr "" 132 | 133 | #: ../src/spek-spectrogram.cc:196 134 | #, c-format 135 | msgid "%d dB" 136 | msgstr "" 137 | 138 | #. TRANSLATORS: keep "00" unchanged, it's used to calc the text width 139 | #: ../src/spek-spectrogram.cc:302 140 | msgid "00 kHz" 141 | msgstr "" 142 | 143 | #. TRANSLATORS: keep "-00" unchanged, it's used to calc the text width 144 | #: ../src/spek-spectrogram.cc:333 145 | msgid "-00 dB" 146 | msgstr "" 147 | 148 | #: ../src/spek-window.cc:75 149 | msgid "Spek - Acoustic Spectrum Analyser" 150 | msgstr "" 151 | 152 | #: ../src/spek-window.cc:91 153 | msgid "&File" 154 | msgstr "" 155 | 156 | #: ../src/spek-window.cc:97 157 | msgid "&Edit" 158 | msgstr "" 159 | 160 | #: ../src/spek-window.cc:101 ../src/spek-window.cc:106 161 | msgid "&Help" 162 | msgstr "" 163 | 164 | #: ../src/spek-window.cc:128 165 | msgid "Help" 166 | msgstr "" 167 | 168 | #: ../src/spek-window.cc:141 169 | msgid "A new version of Spek is available, click to download." 170 | msgstr "" 171 | 172 | #. TRANSLATORS: window title, %s is replaced with the file name 173 | #: ../src/spek-window.cc:179 174 | #, c-format 175 | msgid "Spek - %s" 176 | msgstr "" 177 | 178 | #: ../src/spek-window.cc:226 179 | msgid "All files" 180 | msgstr "" 181 | 182 | #: ../src/spek-window.cc:228 183 | msgid "Audio files" 184 | msgstr "" 185 | 186 | #: ../src/spek-window.cc:242 187 | msgid "Open File" 188 | msgstr "" 189 | 190 | #: ../src/spek-window.cc:264 191 | msgid "PNG images" 192 | msgstr "" 193 | 194 | #: ../src/spek-window.cc:270 195 | msgid "Save Spectrogram" 196 | msgstr "" 197 | 198 | #. Suggested name is .png 199 | #: ../src/spek-window.cc:278 200 | msgid "Untitled" 201 | msgstr "" 202 | 203 | #. TRANSLATORS: Add your name here 204 | #: ../src/spek-window.cc:325 205 | msgid "translator-credits" 206 | msgstr "" 207 | 208 | #: ../src/spek-window.cc:331 209 | msgid "Copyright (c) 2010-2013 Alexander Kojevnikov and contributors" 210 | msgstr "" 211 | 212 | #: ../src/spek-window.cc:334 213 | msgid "Spek Website" 214 | msgstr "" 215 | 216 | #. TRANSLATORS: the %s is the package version. 217 | #: ../src/spek.cc:94 218 | #, c-format 219 | msgid "Spek version %s" 220 | msgstr "" 221 | -------------------------------------------------------------------------------- /po/th.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # Iho Somnam , 2017 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: Spek\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2014-03-29 13:05-0700\n" 12 | "PO-Revision-Date: 2017-10-16 05:09+0000\n" 13 | "Last-Translator: Iho Somnam \n" 14 | "Language-Team: Thai (http://www.transifex.com/spek/spek/language/th/)\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Language: th\n" 19 | "Plural-Forms: nplurals=1; plural=0;\n" 20 | 21 | #: ../data/spek.desktop.in.in.h:1 22 | msgid "Spek" 23 | msgstr "Spek" 24 | 25 | #: ../data/spek.desktop.in.in.h:2 26 | msgid "Spectrum Analyser" 27 | msgstr "วิเคราะห์สเปกตรัม" 28 | 29 | #: ../data/spek.desktop.in.in.h:3 30 | msgid "View spectrograms of your audio files" 31 | msgstr "ดูสเปกโตรแกรมจากไฟล์เสียง" 32 | 33 | #: ../data/spek.desktop.in.in.h:4 34 | msgid "Spek Spectrum Analyser" 35 | msgstr "Spek สเปกตรัมอนาไลเซอร์" 36 | 37 | #: ../src/spek-pipeline.cc:197 38 | #, c-format 39 | msgid "%d kbps" 40 | msgstr "%dkbps" 41 | 42 | #: ../src/spek-pipeline.cc:202 43 | #, c-format 44 | msgid "%d Hz" 45 | msgstr "%d Hz" 46 | 47 | #: ../src/spek-pipeline.cc:209 48 | #, c-format 49 | msgid "%d bit" 50 | msgid_plural "%d bits" 51 | msgstr[0] "%d bits" 52 | 53 | #: ../src/spek-pipeline.cc:217 54 | #, c-format 55 | msgid "%d channel" 56 | msgid_plural "%d channels" 57 | msgstr[0] "%dchannels" 58 | 59 | #: ../src/spek-pipeline.cc:234 60 | msgid "Cannot open input file" 61 | msgstr "ไม่สามารถเปิดไฟล์ได้" 62 | 63 | #: ../src/spek-pipeline.cc:237 64 | msgid "Cannot find stream info" 65 | msgstr "ไม่สามารถหาข้อมูลสตรีมได้" 66 | 67 | #: ../src/spek-pipeline.cc:240 68 | msgid "The file contains no audio streams" 69 | msgstr "ไฟล์ไม่ได้มีข้อมูลเสียงบรรจุอยู่" 70 | 71 | #: ../src/spek-pipeline.cc:243 72 | msgid "Cannot find decoder" 73 | msgstr "ไม่สามารถหาตัวถอดรหัส" 74 | 75 | #: ../src/spek-pipeline.cc:246 76 | msgid "Unknown duration" 77 | msgstr "ไม่ทราบระยะเวลา" 78 | 79 | #: ../src/spek-pipeline.cc:249 80 | msgid "No audio channels" 81 | msgstr "ไม่มีร่องเสียง" 82 | 83 | #: ../src/spek-pipeline.cc:252 84 | msgid "Cannot open decoder" 85 | msgstr "ไม่สามารถเปิดตัวถอดรหัส" 86 | 87 | #: ../src/spek-pipeline.cc:255 88 | msgid "Unsupported sample format" 89 | msgstr "ไม่รองรับ Sample Format" 90 | 91 | #. TRANSLATORS: first %s is the error message, second %s is stream 92 | #. description. 93 | #: ../src/spek-pipeline.cc:267 94 | #, c-format 95 | msgid "%s: %s" 96 | msgstr "%s: %s" 97 | 98 | #: ../src/spek-preferences-dialog.cc:67 99 | msgid "Preferences" 100 | msgstr "การตั้งค่า" 101 | 102 | #: ../src/spek-preferences-dialog.cc:72 103 | msgid "(system default)" 104 | msgstr "(ค่าระบบดั้งเดิม)" 105 | 106 | #. TRANSLATORS: The name of a section in the Preferences dialog. 107 | #: ../src/spek-preferences-dialog.cc:79 108 | msgid "General" 109 | msgstr "ตั้งค่าทั่วไป" 110 | 111 | #: ../src/spek-preferences-dialog.cc:88 112 | msgid "Language:" 113 | msgstr "ภาษา:" 114 | 115 | #: ../src/spek-preferences-dialog.cc:104 116 | msgid "Check for &updates" 117 | msgstr "ตรวจสอบ &การอัพเดต" 118 | 119 | #: ../src/spek-spectrogram.cc:191 120 | #, c-format 121 | msgid "%d kHz" 122 | msgstr "%d kHz" 123 | 124 | #: ../src/spek-spectrogram.cc:196 125 | #, c-format 126 | msgid "%d dB" 127 | msgstr "%d dB" 128 | 129 | #. TRANSLATORS: keep "00" unchanged, it's used to calc the text width 130 | #: ../src/spek-spectrogram.cc:302 131 | msgid "00 kHz" 132 | msgstr "00 kHz" 133 | 134 | #. TRANSLATORS: keep "-00" unchanged, it's used to calc the text width 135 | #: ../src/spek-spectrogram.cc:333 136 | msgid "-00 dB" 137 | msgstr "-00 dB" 138 | 139 | #: ../src/spek-window.cc:75 140 | msgid "Spek - Acoustic Spectrum Analyser" 141 | msgstr "Spek - อะคูสติกสเปกตรัมอนาไลเซอร์" 142 | 143 | #: ../src/spek-window.cc:91 144 | msgid "&File" 145 | msgstr "&ไฟล์" 146 | 147 | #: ../src/spek-window.cc:97 148 | msgid "&Edit" 149 | msgstr "&แก้ไข" 150 | 151 | #: ../src/spek-window.cc:101 ../src/spek-window.cc:106 152 | msgid "&Help" 153 | msgstr "&ช่วยเหลือ" 154 | 155 | #: ../src/spek-window.cc:128 156 | msgid "Help" 157 | msgstr "ช่วยเหลือ" 158 | 159 | #: ../src/spek-window.cc:141 160 | msgid "A new version of Spek is available, click to download." 161 | msgstr "Spek มีเวอร์ชันล่าสุด, คลิกที่นี่เพื่อดาวน์โหลด" 162 | 163 | #. TRANSLATORS: window title, %s is replaced with the file name 164 | #: ../src/spek-window.cc:179 165 | #, c-format 166 | msgid "Spek - %s" 167 | msgstr "Spek - %s" 168 | 169 | #: ../src/spek-window.cc:226 170 | msgid "All files" 171 | msgstr "ไฟล์ทั้งหมด" 172 | 173 | #: ../src/spek-window.cc:228 174 | msgid "Audio files" 175 | msgstr "ไฟล์เสียง" 176 | 177 | #: ../src/spek-window.cc:242 178 | msgid "Open File" 179 | msgstr "เปิดไฟล์" 180 | 181 | #: ../src/spek-window.cc:264 182 | msgid "PNG images" 183 | msgstr "รูปภาพ PNG" 184 | 185 | #: ../src/spek-window.cc:270 186 | msgid "Save Spectrogram" 187 | msgstr "บันทึกสเปกโตรแกรม" 188 | 189 | #. Suggested name is .png 190 | #: ../src/spek-window.cc:278 191 | msgid "Untitled" 192 | msgstr "ไฟล์ที่ไม่ได้ตั้งชื่อ" 193 | 194 | #. TRANSLATORS: Add your name here 195 | #: ../src/spek-window.cc:325 196 | msgid "translator-credits" 197 | msgstr "ไอโฮ โสมนาม" 198 | 199 | #: ../src/spek-window.cc:331 200 | msgid "Copyright (c) 2010-2013 Alexander Kojevnikov and contributors" 201 | msgstr "ลิขสิทธิ์ (c) 2010-2013 Alexander Kojevnikov และผู้มีส่วนร่วม" 202 | 203 | #: ../src/spek-window.cc:334 204 | msgid "Spek Website" 205 | msgstr "เว็บไซต์ Spek" 206 | 207 | #. TRANSLATORS: the %s is the package version. 208 | #: ../src/spek.cc:94 209 | #, c-format 210 | msgid "Spek version %s" 211 | msgstr "Spek เวอร์ชัน %s" 212 | -------------------------------------------------------------------------------- /po/vi.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # alienyd , 2013 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: Spek\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2014-03-29 13:05-0700\n" 12 | "PO-Revision-Date: 2017-09-19 14:52+0000\n" 13 | "Last-Translator: Alexander Kojevnikov \n" 14 | "Language-Team: Vietnamese (http://www.transifex.com/spek/spek/language/vi/)\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Language: vi\n" 19 | "Plural-Forms: nplurals=1; plural=0;\n" 20 | 21 | #: ../data/spek.desktop.in.in.h:1 22 | msgid "Spek" 23 | msgstr "Spek" 24 | 25 | #: ../data/spek.desktop.in.in.h:2 26 | msgid "Spectrum Analyser" 27 | msgstr "Phân tích âm phổ" 28 | 29 | #: ../data/spek.desktop.in.in.h:3 30 | msgid "View spectrograms of your audio files" 31 | msgstr "Xem âm phổ của file nhạc" 32 | 33 | #: ../data/spek.desktop.in.in.h:4 34 | msgid "Spek Spectrum Analyser" 35 | msgstr "Spek phân tích âm phổ" 36 | 37 | #: ../src/spek-pipeline.cc:197 38 | #, c-format 39 | msgid "%d kbps" 40 | msgstr "%d kbps" 41 | 42 | #: ../src/spek-pipeline.cc:202 43 | #, c-format 44 | msgid "%d Hz" 45 | msgstr "%d Hz" 46 | 47 | #: ../src/spek-pipeline.cc:209 48 | #, c-format 49 | msgid "%d bit" 50 | msgid_plural "%d bits" 51 | msgstr[0] "%d bits" 52 | 53 | #: ../src/spek-pipeline.cc:217 54 | #, c-format 55 | msgid "%d channel" 56 | msgid_plural "%d channels" 57 | msgstr[0] "%d kênh" 58 | 59 | #: ../src/spek-pipeline.cc:234 60 | msgid "Cannot open input file" 61 | msgstr "Không thể mở file" 62 | 63 | #: ../src/spek-pipeline.cc:237 64 | msgid "Cannot find stream info" 65 | msgstr "Không tìm thấy dữ liệu âm thanh" 66 | 67 | #: ../src/spek-pipeline.cc:240 68 | msgid "The file contains no audio streams" 69 | msgstr "File không chứa dữ liệu âm thanh nào" 70 | 71 | #: ../src/spek-pipeline.cc:243 72 | msgid "Cannot find decoder" 73 | msgstr "Không tìm thấy phần mềm giải mã" 74 | 75 | #: ../src/spek-pipeline.cc:246 76 | msgid "Unknown duration" 77 | msgstr "Độ dài không xác định" 78 | 79 | #: ../src/spek-pipeline.cc:249 80 | msgid "No audio channels" 81 | msgstr "Không có kênh âm thanh nào" 82 | 83 | #: ../src/spek-pipeline.cc:252 84 | msgid "Cannot open decoder" 85 | msgstr "Không thể mở phần mềm giải mã" 86 | 87 | #: ../src/spek-pipeline.cc:255 88 | msgid "Unsupported sample format" 89 | msgstr "Định dạng lấy mẫu không được hỗ trợ" 90 | 91 | #. TRANSLATORS: first %s is the error message, second %s is stream 92 | #. description. 93 | #: ../src/spek-pipeline.cc:267 94 | #, c-format 95 | msgid "%s: %s" 96 | msgstr "%s: %s" 97 | 98 | #: ../src/spek-preferences-dialog.cc:67 99 | msgid "Preferences" 100 | msgstr "Tuỳ chỉnh" 101 | 102 | #: ../src/spek-preferences-dialog.cc:72 103 | msgid "(system default)" 104 | msgstr "(mặc định)" 105 | 106 | #. TRANSLATORS: The name of a section in the Preferences dialog. 107 | #: ../src/spek-preferences-dialog.cc:79 108 | msgid "General" 109 | msgstr "Chung" 110 | 111 | #: ../src/spek-preferences-dialog.cc:88 112 | msgid "Language:" 113 | msgstr "Ngôn ngữ:" 114 | 115 | #: ../src/spek-preferences-dialog.cc:104 116 | msgid "Check for &updates" 117 | msgstr "Kiểm tra &cập nhật" 118 | 119 | #: ../src/spek-spectrogram.cc:191 120 | #, c-format 121 | msgid "%d kHz" 122 | msgstr "%d kHz" 123 | 124 | #: ../src/spek-spectrogram.cc:196 125 | #, c-format 126 | msgid "%d dB" 127 | msgstr "%d dB" 128 | 129 | #. TRANSLATORS: keep "00" unchanged, it's used to calc the text width 130 | #: ../src/spek-spectrogram.cc:302 131 | msgid "00 kHz" 132 | msgstr "00 kHz" 133 | 134 | #. TRANSLATORS: keep "-00" unchanged, it's used to calc the text width 135 | #: ../src/spek-spectrogram.cc:333 136 | msgid "-00 dB" 137 | msgstr "-00 dB" 138 | 139 | #: ../src/spek-window.cc:75 140 | msgid "Spek - Acoustic Spectrum Analyser" 141 | msgstr "Spek - Chương trình phân tích âm phổ" 142 | 143 | #: ../src/spek-window.cc:91 144 | msgid "&File" 145 | msgstr "&File" 146 | 147 | #: ../src/spek-window.cc:97 148 | msgid "&Edit" 149 | msgstr "&Chỉnh sửa" 150 | 151 | #: ../src/spek-window.cc:101 ../src/spek-window.cc:106 152 | msgid "&Help" 153 | msgstr "&Trợ giúp" 154 | 155 | #: ../src/spek-window.cc:128 156 | msgid "Help" 157 | msgstr "Trợ giúp" 158 | 159 | #: ../src/spek-window.cc:141 160 | msgid "A new version of Spek is available, click to download." 161 | msgstr "Spek đã có phiên bản mới, hãy click để tải về." 162 | 163 | #. TRANSLATORS: window title, %s is replaced with the file name 164 | #: ../src/spek-window.cc:179 165 | #, c-format 166 | msgid "Spek - %s" 167 | msgstr "Spek - %s" 168 | 169 | #: ../src/spek-window.cc:226 170 | msgid "All files" 171 | msgstr "Mọi loại file" 172 | 173 | #: ../src/spek-window.cc:228 174 | msgid "Audio files" 175 | msgstr "File nhạc" 176 | 177 | #: ../src/spek-window.cc:242 178 | msgid "Open File" 179 | msgstr "Mở file" 180 | 181 | #: ../src/spek-window.cc:264 182 | msgid "PNG images" 183 | msgstr "Ảnh PNG" 184 | 185 | #: ../src/spek-window.cc:270 186 | msgid "Save Spectrogram" 187 | msgstr "Lưu âm phổ" 188 | 189 | #. Suggested name is .png 190 | #: ../src/spek-window.cc:278 191 | msgid "Untitled" 192 | msgstr "Không tên" 193 | 194 | #. TRANSLATORS: Add your name here 195 | #: ../src/spek-window.cc:325 196 | msgid "translator-credits" 197 | msgstr "alienyd" 198 | 199 | #: ../src/spek-window.cc:331 200 | msgid "Copyright (c) 2010-2013 Alexander Kojevnikov and contributors" 201 | msgstr "Bản quyền (c) 2010-2013 thuộc về Alexander Kojevnikov và cộng sự" 202 | 203 | #: ../src/spek-window.cc:334 204 | msgid "Spek Website" 205 | msgstr "Trang chủ của Spek" 206 | 207 | #. TRANSLATORS: the %s is the package version. 208 | #: ../src/spek.cc:94 209 | #, c-format 210 | msgid "Spek version %s" 211 | msgstr "Spek phiên bản %s" 212 | -------------------------------------------------------------------------------- /po/zh_CN.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # Alexander Kojevnikov , 2012 7 | # Shibing Huang , 2012 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: Spek\n" 11 | "Report-Msgid-Bugs-To: \n" 12 | "POT-Creation-Date: 2014-03-29 13:05-0700\n" 13 | "PO-Revision-Date: 2017-09-19 12:11+0000\n" 14 | "Last-Translator: Alexander Kojevnikov \n" 15 | "Language-Team: Chinese (China) (http://www.transifex.com/spek/spek/language/zh_CN/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_CN\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | #: ../data/spek.desktop.in.in.h:1 23 | msgid "Spek" 24 | msgstr "Spek" 25 | 26 | #: ../data/spek.desktop.in.in.h:2 27 | msgid "Spectrum Analyser" 28 | msgstr "频谱分析器" 29 | 30 | #: ../data/spek.desktop.in.in.h:3 31 | msgid "View spectrograms of your audio files" 32 | msgstr "查看您的音频频谱" 33 | 34 | #: ../data/spek.desktop.in.in.h:4 35 | msgid "Spek Spectrum Analyser" 36 | msgstr "Spek频谱分析器" 37 | 38 | #: ../src/spek-pipeline.cc:197 39 | #, c-format 40 | msgid "%d kbps" 41 | msgstr "%d kbps" 42 | 43 | #: ../src/spek-pipeline.cc:202 44 | #, c-format 45 | msgid "%d Hz" 46 | msgstr "%d Hz" 47 | 48 | #: ../src/spek-pipeline.cc:209 49 | #, c-format 50 | msgid "%d bit" 51 | msgid_plural "%d bits" 52 | msgstr[0] "%d bits" 53 | 54 | #: ../src/spek-pipeline.cc:217 55 | #, c-format 56 | msgid "%d channel" 57 | msgid_plural "%d channels" 58 | msgstr[0] "%d channels" 59 | 60 | #: ../src/spek-pipeline.cc:234 61 | msgid "Cannot open input file" 62 | msgstr "无法打开该文件" 63 | 64 | #: ../src/spek-pipeline.cc:237 65 | msgid "Cannot find stream info" 66 | msgstr "无法定位媒体信息" 67 | 68 | #: ../src/spek-pipeline.cc:240 69 | msgid "The file contains no audio streams" 70 | msgstr "该文件不包含任何音频流" 71 | 72 | #: ../src/spek-pipeline.cc:243 73 | msgid "Cannot find decoder" 74 | msgstr "无法定位解码器" 75 | 76 | #: ../src/spek-pipeline.cc:246 77 | msgid "Unknown duration" 78 | msgstr "未知长度" 79 | 80 | #: ../src/spek-pipeline.cc:249 81 | msgid "No audio channels" 82 | msgstr "无音频通道" 83 | 84 | #: ../src/spek-pipeline.cc:252 85 | msgid "Cannot open decoder" 86 | msgstr "无法打开解码器" 87 | 88 | #: ../src/spek-pipeline.cc:255 89 | msgid "Unsupported sample format" 90 | msgstr "不支持的音频格式" 91 | 92 | #. TRANSLATORS: first %s is the error message, second %s is stream 93 | #. description. 94 | #: ../src/spek-pipeline.cc:267 95 | #, c-format 96 | msgid "%s: %s" 97 | msgstr "%s: %s" 98 | 99 | #: ../src/spek-preferences-dialog.cc:67 100 | msgid "Preferences" 101 | msgstr "偏好设置" 102 | 103 | #: ../src/spek-preferences-dialog.cc:72 104 | msgid "(system default)" 105 | msgstr "(系统默认)" 106 | 107 | #. TRANSLATORS: The name of a section in the Preferences dialog. 108 | #: ../src/spek-preferences-dialog.cc:79 109 | msgid "General" 110 | msgstr "基本设置" 111 | 112 | #: ../src/spek-preferences-dialog.cc:88 113 | msgid "Language:" 114 | msgstr "语言" 115 | 116 | #: ../src/spek-preferences-dialog.cc:104 117 | msgid "Check for &updates" 118 | msgstr "检查更新" 119 | 120 | #: ../src/spek-spectrogram.cc:191 121 | #, c-format 122 | msgid "%d kHz" 123 | msgstr "%d kHz" 124 | 125 | #: ../src/spek-spectrogram.cc:196 126 | #, c-format 127 | msgid "%d dB" 128 | msgstr "%d dB" 129 | 130 | #. TRANSLATORS: keep "00" unchanged, it's used to calc the text width 131 | #: ../src/spek-spectrogram.cc:302 132 | msgid "00 kHz" 133 | msgstr "00 kHz" 134 | 135 | #. TRANSLATORS: keep "-00" unchanged, it's used to calc the text width 136 | #: ../src/spek-spectrogram.cc:333 137 | msgid "-00 dB" 138 | msgstr "-00 dB" 139 | 140 | #: ../src/spek-window.cc:75 141 | msgid "Spek - Acoustic Spectrum Analyser" 142 | msgstr "Spek - 声学频谱分析器" 143 | 144 | #: ../src/spek-window.cc:91 145 | msgid "&File" 146 | msgstr "文件" 147 | 148 | #: ../src/spek-window.cc:97 149 | msgid "&Edit" 150 | msgstr "编辑" 151 | 152 | #: ../src/spek-window.cc:101 ../src/spek-window.cc:106 153 | msgid "&Help" 154 | msgstr "帮助" 155 | 156 | #: ../src/spek-window.cc:128 157 | msgid "Help" 158 | msgstr "帮助" 159 | 160 | #: ../src/spek-window.cc:141 161 | msgid "A new version of Spek is available, click to download." 162 | msgstr "有更新版本的Spek,点击下载。" 163 | 164 | #. TRANSLATORS: window title, %s is replaced with the file name 165 | #: ../src/spek-window.cc:179 166 | #, c-format 167 | msgid "Spek - %s" 168 | msgstr "Spek - %s" 169 | 170 | #: ../src/spek-window.cc:226 171 | msgid "All files" 172 | msgstr "所有文件" 173 | 174 | #: ../src/spek-window.cc:228 175 | msgid "Audio files" 176 | msgstr "音频文件" 177 | 178 | #: ../src/spek-window.cc:242 179 | msgid "Open File" 180 | msgstr "打开文件" 181 | 182 | #: ../src/spek-window.cc:264 183 | msgid "PNG images" 184 | msgstr "PNG图像" 185 | 186 | #: ../src/spek-window.cc:270 187 | msgid "Save Spectrogram" 188 | msgstr "保存频谱" 189 | 190 | #. Suggested name is .png 191 | #: ../src/spek-window.cc:278 192 | msgid "Untitled" 193 | msgstr "未命名" 194 | 195 | #. TRANSLATORS: Add your name here 196 | #: ../src/spek-window.cc:325 197 | msgid "translator-credits" 198 | msgstr "翻译由 Shibing Huang 提供" 199 | 200 | #: ../src/spek-window.cc:331 201 | msgid "Copyright (c) 2010-2013 Alexander Kojevnikov and contributors" 202 | msgstr "(c) 2010-2013 Alexander Kojevnikov 以及贡献者 版权所有" 203 | 204 | #: ../src/spek-window.cc:334 205 | msgid "Spek Website" 206 | msgstr "Spek官方" 207 | 208 | #. TRANSLATORS: the %s is the package version. 209 | #: ../src/spek.cc:94 210 | #, c-format 211 | msgid "Spek version %s" 212 | msgstr "Spek 版本 %s" 213 | -------------------------------------------------------------------------------- /po/zh_TW.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # 5 | # Translators: 6 | # Alexander Kojevnikov , 2012 7 | # Shibing Huang , 2012 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: Spek\n" 11 | "Report-Msgid-Bugs-To: \n" 12 | "POT-Creation-Date: 2014-03-29 13:05-0700\n" 13 | "PO-Revision-Date: 2017-09-19 12:11+0000\n" 14 | "Last-Translator: Alexander Kojevnikov \n" 15 | "Language-Team: Chinese (Taiwan) (http://www.transifex.com/spek/spek/language/zh_TW/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_TW\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | #: ../data/spek.desktop.in.in.h:1 23 | msgid "Spek" 24 | msgstr "Spek" 25 | 26 | #: ../data/spek.desktop.in.in.h:2 27 | msgid "Spectrum Analyser" 28 | msgstr "頻譜分析儀" 29 | 30 | #: ../data/spek.desktop.in.in.h:3 31 | msgid "View spectrograms of your audio files" 32 | msgstr "顯示您的音頻頻譜" 33 | 34 | #: ../data/spek.desktop.in.in.h:4 35 | msgid "Spek Spectrum Analyser" 36 | msgstr "Spek頻譜分析儀" 37 | 38 | #: ../src/spek-pipeline.cc:197 39 | #, c-format 40 | msgid "%d kbps" 41 | msgstr "%d kbps" 42 | 43 | #: ../src/spek-pipeline.cc:202 44 | #, c-format 45 | msgid "%d Hz" 46 | msgstr "%d Hz" 47 | 48 | #: ../src/spek-pipeline.cc:209 49 | #, c-format 50 | msgid "%d bit" 51 | msgid_plural "%d bits" 52 | msgstr[0] "%d bits" 53 | 54 | #: ../src/spek-pipeline.cc:217 55 | #, c-format 56 | msgid "%d channel" 57 | msgid_plural "%d channels" 58 | msgstr[0] "%d channels" 59 | 60 | #: ../src/spek-pipeline.cc:234 61 | msgid "Cannot open input file" 62 | msgstr "無法開啟該檔案" 63 | 64 | #: ../src/spek-pipeline.cc:237 65 | msgid "Cannot find stream info" 66 | msgstr "無法定位媒體信息" 67 | 68 | #: ../src/spek-pipeline.cc:240 69 | msgid "The file contains no audio streams" 70 | msgstr "該檔案不包含音訊流" 71 | 72 | #: ../src/spek-pipeline.cc:243 73 | msgid "Cannot find decoder" 74 | msgstr "無法定位解碼器" 75 | 76 | #: ../src/spek-pipeline.cc:246 77 | msgid "Unknown duration" 78 | msgstr "未知長度" 79 | 80 | #: ../src/spek-pipeline.cc:249 81 | msgid "No audio channels" 82 | msgstr "無音頻聲道" 83 | 84 | #: ../src/spek-pipeline.cc:252 85 | msgid "Cannot open decoder" 86 | msgstr "無法執行解碼器" 87 | 88 | #: ../src/spek-pipeline.cc:255 89 | msgid "Unsupported sample format" 90 | msgstr "不支援此音訊的格式" 91 | 92 | #. TRANSLATORS: first %s is the error message, second %s is stream 93 | #. description. 94 | #: ../src/spek-pipeline.cc:267 95 | #, c-format 96 | msgid "%s: %s" 97 | msgstr "%s: %s" 98 | 99 | #: ../src/spek-preferences-dialog.cc:67 100 | msgid "Preferences" 101 | msgstr "喜好設定" 102 | 103 | #: ../src/spek-preferences-dialog.cc:72 104 | msgid "(system default)" 105 | msgstr "(系統預設)" 106 | 107 | #. TRANSLATORS: The name of a section in the Preferences dialog. 108 | #: ../src/spek-preferences-dialog.cc:79 109 | msgid "General" 110 | msgstr "一般設定" 111 | 112 | #: ../src/spek-preferences-dialog.cc:88 113 | msgid "Language:" 114 | msgstr "語言" 115 | 116 | #: ../src/spek-preferences-dialog.cc:104 117 | msgid "Check for &updates" 118 | msgstr "檢查更新" 119 | 120 | #: ../src/spek-spectrogram.cc:191 121 | #, c-format 122 | msgid "%d kHz" 123 | msgstr "%d kHz" 124 | 125 | #: ../src/spek-spectrogram.cc:196 126 | #, c-format 127 | msgid "%d dB" 128 | msgstr "%d dB" 129 | 130 | #. TRANSLATORS: keep "00" unchanged, it's used to calc the text width 131 | #: ../src/spek-spectrogram.cc:302 132 | msgid "00 kHz" 133 | msgstr "00 kHz" 134 | 135 | #. TRANSLATORS: keep "-00" unchanged, it's used to calc the text width 136 | #: ../src/spek-spectrogram.cc:333 137 | msgid "-00 dB" 138 | msgstr "-00 dB" 139 | 140 | #: ../src/spek-window.cc:75 141 | msgid "Spek - Acoustic Spectrum Analyser" 142 | msgstr "Spek - 聲學頻譜分析儀" 143 | 144 | #: ../src/spek-window.cc:91 145 | msgid "&File" 146 | msgstr "檔案" 147 | 148 | #: ../src/spek-window.cc:97 149 | msgid "&Edit" 150 | msgstr "編輯" 151 | 152 | #: ../src/spek-window.cc:101 ../src/spek-window.cc:106 153 | msgid "&Help" 154 | msgstr "幫助" 155 | 156 | #: ../src/spek-window.cc:128 157 | msgid "Help" 158 | msgstr "幫助" 159 | 160 | #: ../src/spek-window.cc:141 161 | msgid "A new version of Spek is available, click to download." 162 | msgstr "已經有更新版本的Spek發佈,點擊更新" 163 | 164 | #. TRANSLATORS: window title, %s is replaced with the file name 165 | #: ../src/spek-window.cc:179 166 | #, c-format 167 | msgid "Spek - %s" 168 | msgstr "Spek - %s" 169 | 170 | #: ../src/spek-window.cc:226 171 | msgid "All files" 172 | msgstr "所有檔案" 173 | 174 | #: ../src/spek-window.cc:228 175 | msgid "Audio files" 176 | msgstr "音頻檔案" 177 | 178 | #: ../src/spek-window.cc:242 179 | msgid "Open File" 180 | msgstr "開啟檔案" 181 | 182 | #: ../src/spek-window.cc:264 183 | msgid "PNG images" 184 | msgstr "PNG圖像" 185 | 186 | #: ../src/spek-window.cc:270 187 | msgid "Save Spectrogram" 188 | msgstr "保存頻譜" 189 | 190 | #. Suggested name is .png 191 | #: ../src/spek-window.cc:278 192 | msgid "Untitled" 193 | msgstr "未命名" 194 | 195 | #. TRANSLATORS: Add your name here 196 | #: ../src/spek-window.cc:325 197 | msgid "translator-credits" 198 | msgstr "Shibing Huang 提供" 199 | 200 | #: ../src/spek-window.cc:331 201 | msgid "Copyright (c) 2010-2013 Alexander Kojevnikov and contributors" 202 | msgstr "(c) 2010-2013 Alexander Kojevnikov以及貢獻者 版權所有" 203 | 204 | #: ../src/spek-window.cc:334 205 | msgid "Spek Website" 206 | msgstr "Spek官網" 207 | 208 | #. TRANSLATORS: the %s is the package version. 209 | #: ../src/spek.cc:94 210 | #, c-format 211 | msgid "Spek version %s" 212 | msgstr "Spek 版本信息 %s" 213 | -------------------------------------------------------------------------------- /src/Makefile.am: -------------------------------------------------------------------------------- 1 | noinst_LIBRARIES = libspek.a 2 | 3 | libspek_a_SOURCES = \ 4 | spek-audio.cc \ 5 | spek-audio.h \ 6 | spek-fft.cc \ 7 | spek-fft.h \ 8 | spek-palette.cc \ 9 | spek-palette.h \ 10 | spek-pipeline.cc \ 11 | spek-pipeline.h \ 12 | spek-utils.cc \ 13 | spek-utils.h 14 | 15 | libspek_a_CPPFLAGS = \ 16 | -include config.h \ 17 | -pthread \ 18 | $(WX_CPPFLAGS) 19 | 20 | libspek_a_CXXFLAGS = \ 21 | $(AVFORMAT_CFLAGS) \ 22 | $(AVCODEC_CFLAGS) \ 23 | $(AVUTIL_CFLAGS) \ 24 | $(WX_CXXFLAGS_ONLY) 25 | 26 | bin_PROGRAMS = spek 27 | 28 | spek_SOURCES = \ 29 | spek-artwork.cc \ 30 | spek-artwork.h \ 31 | spek-events.cc \ 32 | spek-events.h \ 33 | spek-platform.cc \ 34 | spek-platform.h \ 35 | spek-preferences-dialog.cc \ 36 | spek-preferences-dialog.h \ 37 | spek-preferences.cc \ 38 | spek-preferences.h \ 39 | spek-ruler.cc \ 40 | spek-ruler.h \ 41 | spek-spectrogram.cc \ 42 | spek-spectrogram.h \ 43 | spek-window.cc \ 44 | spek-window.h \ 45 | spek.cc 46 | 47 | spek_CPPFLAGS = \ 48 | -include config.h \ 49 | -pthread \ 50 | $(WX_CPPFLAGS) 51 | 52 | spek_CXXFLAGS = \ 53 | $(WX_CXXFLAGS_ONLY) 54 | 55 | spek_LDADD = \ 56 | libspek.a \ 57 | $(AVFORMAT_LIBS) \ 58 | $(AVCODEC_LIBS) \ 59 | $(AVUTIL_LIBS) \ 60 | $(WX_LIBS) 61 | 62 | spek_LDFLAGS = \ 63 | -pthread 64 | -------------------------------------------------------------------------------- /src/spek-artwork.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include "spek-artwork.h" 5 | 6 | class SpekArtProvider : public wxArtProvider 7 | { 8 | protected: 9 | virtual wxBitmap CreateBitmap(const wxArtID& id, const wxArtClient& client, const wxSize& size); 10 | virtual wxIconBundle CreateIconBundle(const wxArtID& id, const wxArtClient& client); 11 | }; 12 | 13 | wxBitmap SpekArtProvider::CreateBitmap( 14 | const wxArtID& id, const wxArtClient& client, const wxSize& size) 15 | { 16 | (void) id, (void) client, (void) size; 17 | #ifdef OS_UNIX 18 | if (id == ART_SPEK) { 19 | return wxArtProvider::GetBitmap("spek", client, size); 20 | } 21 | if (id == ART_HELP) { 22 | return wxArtProvider::GetBitmap("gtk-help", client, size); 23 | } 24 | if (id == ART_OPEN) { 25 | return wxArtProvider::GetBitmap("gtk-open", client, size); 26 | } 27 | if (id == ART_SAVE) { 28 | return wxArtProvider::GetBitmap("gtk-save", client, size); 29 | } 30 | if (id == ART_CLOSE) { 31 | return wxArtProvider::GetBitmap("gtk-close", client, size); 32 | } 33 | #endif 34 | #ifdef OS_WIN 35 | if (id == ART_HELP) { 36 | return wxIcon("help", wxBITMAP_TYPE_ICO_RESOURCE, 24, 24); 37 | } 38 | if (id == ART_OPEN) { 39 | return wxIcon("open", wxBITMAP_TYPE_ICO_RESOURCE, 24, 24); 40 | } 41 | if (id == ART_SAVE) { 42 | return wxIcon("save", wxBITMAP_TYPE_ICO_RESOURCE, 24, 24); 43 | } 44 | if (id == ART_CLOSE) { 45 | return wxIcon("close", wxBITMAP_TYPE_ICO_RESOURCE, 16, 16); 46 | } 47 | #endif 48 | #ifdef OS_OSX 49 | if (id == ART_HELP) { 50 | return wxBitmap("help", wxBITMAP_TYPE_PNG_RESOURCE); 51 | } 52 | if (id == ART_OPEN) { 53 | return wxBitmap("open", wxBITMAP_TYPE_PNG_RESOURCE); 54 | } 55 | if (id == ART_SAVE) { 56 | return wxBitmap("save", wxBITMAP_TYPE_PNG_RESOURCE); 57 | } 58 | if (id == ART_CLOSE) { 59 | return wxBitmap("close", wxBITMAP_TYPE_PNG_RESOURCE); 60 | } 61 | #endif 62 | return wxNullBitmap; 63 | } 64 | 65 | wxIconBundle SpekArtProvider::CreateIconBundle(const wxArtID& id, const wxArtClient& client) 66 | { 67 | (void) id, (void) client; 68 | #ifdef OS_UNIX 69 | if (id == ART_SPEK) { 70 | return wxArtProvider::GetIconBundle("spek", client); 71 | } 72 | #endif 73 | #ifdef OS_WIN 74 | if (id == ART_SPEK) { 75 | wxIconBundle bundle; 76 | bundle.AddIcon(wxIcon("aaaa", wxBITMAP_TYPE_ICO_RESOURCE, 16, 16)); 77 | bundle.AddIcon(wxIcon("aaaa", wxBITMAP_TYPE_ICO_RESOURCE, 24, 24)); 78 | bundle.AddIcon(wxIcon("aaaa", wxBITMAP_TYPE_ICO_RESOURCE, 32, 32)); 79 | bundle.AddIcon(wxIcon("aaaa", wxBITMAP_TYPE_ICO_RESOURCE, 48, 48)); 80 | return bundle; 81 | } 82 | #endif 83 | return wxNullIconBundle; 84 | } 85 | 86 | void spek_artwork_init() 87 | { 88 | wxArtProvider::Push(new SpekArtProvider()); 89 | } 90 | -------------------------------------------------------------------------------- /src/spek-artwork.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #define ART_SPEK "art-spek" 4 | #define ART_OPEN "art-open" 5 | #define ART_SAVE "art-save" 6 | #define ART_HELP "art-help" 7 | #define ART_CLOSE "art-close" 8 | 9 | void spek_artwork_init(); 10 | -------------------------------------------------------------------------------- /src/spek-audio.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | class AudioFile; 8 | enum class AudioError; 9 | 10 | class Audio 11 | { 12 | public: 13 | Audio(); 14 | ~Audio(); 15 | 16 | std::unique_ptr open(const std::string& file_name, int stream); 17 | }; 18 | 19 | class AudioFile 20 | { 21 | public: 22 | virtual ~AudioFile() {} 23 | 24 | virtual void start(int channel, int samples) = 0; 25 | virtual int read() = 0; 26 | 27 | virtual AudioError get_error() const = 0; 28 | virtual std::string get_codec_name() const = 0; 29 | virtual int get_bit_rate() const = 0; 30 | virtual int get_sample_rate() const = 0; 31 | virtual int get_bits_per_sample() const = 0; 32 | virtual int get_streams() const = 0; 33 | virtual int get_channels() const = 0; 34 | virtual double get_duration() const = 0; 35 | virtual const float *get_buffer() const = 0; 36 | virtual int64_t get_frames_per_interval() const = 0; 37 | virtual int64_t get_error_per_interval() const = 0; 38 | virtual int64_t get_error_base() const = 0; 39 | }; 40 | 41 | enum class AudioError 42 | { 43 | OK, 44 | CANNOT_OPEN_FILE, 45 | NO_STREAMS, 46 | NO_AUDIO, 47 | NO_DECODER, 48 | NO_DURATION, 49 | NO_CHANNELS, 50 | CANNOT_OPEN_DECODER, 51 | BAD_SAMPLE_FORMAT, 52 | }; 53 | 54 | inline bool operator!(AudioError error) { 55 | return error == AudioError::OK; 56 | } 57 | 58 | inline std::ostream& operator<<(std::ostream& os, AudioError error) { 59 | return os << static_cast(error); 60 | } 61 | -------------------------------------------------------------------------------- /src/spek-events.cc: -------------------------------------------------------------------------------- 1 | #include "spek-events.h" 2 | 3 | //IMPLEMENT_DYNAMIC_CLASS(SpekHaveSampleEvent, wxEvent) 4 | DEFINE_EVENT_TYPE(SPEK_HAVE_SAMPLE) 5 | 6 | SpekHaveSampleEvent::SpekHaveSampleEvent(int bands, int sample, float *values, bool free_values) 7 | : wxEvent(), bands(bands), sample(sample), values(values), free_values(free_values) 8 | { 9 | SetEventType(SPEK_HAVE_SAMPLE); 10 | } 11 | 12 | SpekHaveSampleEvent::SpekHaveSampleEvent(const SpekHaveSampleEvent& other) : wxEvent(other) 13 | { 14 | SetEventType(SPEK_HAVE_SAMPLE); 15 | this->bands = other.bands; 16 | this->sample = other.sample; 17 | if (other.values) { 18 | this->values = (float *)malloc(this->bands * sizeof(float)); 19 | memcpy(this->values, other.values, this->bands * sizeof(float)); 20 | this->free_values = true; 21 | } else { 22 | this->values = NULL; 23 | this->free_values = false; 24 | } 25 | } 26 | 27 | SpekHaveSampleEvent::~SpekHaveSampleEvent() 28 | { 29 | if (this->free_values) { 30 | free(this->values); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/spek-events.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | class SpekHaveSampleEvent: public wxEvent 6 | { 7 | public: 8 | SpekHaveSampleEvent(int bands, int sample, float *values, bool free_values); 9 | SpekHaveSampleEvent(const SpekHaveSampleEvent& other); 10 | ~SpekHaveSampleEvent(); 11 | 12 | int get_bands() const { return this->bands; } 13 | int get_sample() const { return this->sample; } 14 | const float *get_values() const { return this->values; } 15 | 16 | wxEvent *Clone() const { return new SpekHaveSampleEvent(*this); } 17 | 18 | private: 19 | int bands; 20 | int sample; 21 | float *values; 22 | bool free_values; 23 | }; 24 | 25 | DECLARE_EVENT_TYPE(SPEK_HAVE_SAMPLE, wxID_ANY) 26 | 27 | #define SPEK_EVT_HAVE_SAMPLE(fn) \ 28 | DECLARE_EVENT_TABLE_ENTRY(SPEK_HAVE_SAMPLE, -1, -1, \ 29 | (wxObjectEventFunction) &fn, (wxObject *) NULL ), 30 | -------------------------------------------------------------------------------- /src/spek-fft.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #define __STDC_CONSTANT_MACROS 4 | extern "C" { 5 | #include 6 | #if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(58, 18, 100) 7 | #define USE_LIBAVUTIL_TX_API 8 | #include 9 | #else 10 | #include 11 | #endif 12 | } 13 | 14 | #include "spek-fft.h" 15 | 16 | class FFTPlanImpl : public FFTPlan 17 | { 18 | public: 19 | FFTPlanImpl(int nbits); 20 | ~FFTPlanImpl() override; 21 | 22 | void execute() override; 23 | 24 | private: 25 | #ifdef USE_LIBAVUTIL_TX_API 26 | struct AVTXContext *cx; 27 | av_tx_fn tx_func; 28 | #else 29 | struct RDFTContext *cx; 30 | #endif 31 | }; 32 | 33 | std::unique_ptr FFT::create(int nbits) 34 | { 35 | return std::unique_ptr(new FFTPlanImpl(nbits)); 36 | } 37 | 38 | FFTPlanImpl::FFTPlanImpl(int nbits) : FFTPlan(nbits) 39 | { 40 | #ifdef USE_LIBAVUTIL_TX_API 41 | const float scale = 1.f; 42 | av_tx_init(&this->cx, &this->tx_func, AV_TX_FLOAT_RDFT, 0, 1 << nbits, &scale, AV_TX_INPLACE); 43 | #else 44 | this->cx = av_rdft_init(nbits, DFT_R2C); 45 | #endif 46 | } 47 | 48 | FFTPlanImpl::~FFTPlanImpl() 49 | { 50 | #ifdef USE_LIBAVUTIL_TX_API 51 | av_tx_uninit(&this->cx); 52 | #else 53 | av_rdft_end(this->cx); 54 | #endif 55 | } 56 | 57 | void FFTPlanImpl::execute() 58 | { 59 | #ifdef USE_LIBAVUTIL_TX_API 60 | float *input = this->get_input(); 61 | this->tx_func(this->cx, input, input, sizeof(float)); 62 | #else 63 | av_rdft_calc(this->cx, this->get_input()); 64 | #endif 65 | 66 | // Calculate magnitudes. 67 | int n = this->get_input_size(); 68 | float n2 = n * n; 69 | this->set_output(0, 10.0f * log10f(this->get_input(0) * this->get_input(0) / n2)); 70 | this->set_output(n / 2, 10.0f * log10f(this->get_input(1) * this->get_input(1) / n2)); 71 | for (int i = 1; i < n / 2; i++) { 72 | float re = this->get_input(i * 2); 73 | float im = this->get_input(i * 2 + 1); 74 | this->set_output(i, 10.0f * log10f((re * re + im * im) / n2)); 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/spek-fft.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | extern "C" { 7 | #include 8 | } 9 | 10 | 11 | class FFTPlan; 12 | 13 | class FFT 14 | { 15 | public: 16 | FFT() {} 17 | std::unique_ptr create(int nbits); 18 | }; 19 | 20 | class FFTPlan 21 | { 22 | public: 23 | FFTPlan(int nbits) : 24 | input_size(1 << nbits), output_size((1 << (nbits - 1)) + 1), 25 | output(output_size) 26 | { 27 | // FFmpeg uses various assembly optimizations which expect 28 | // input data to be aligned by up to 32 bytes (e.g. AVX) 29 | this->input = (float*) av_malloc(sizeof(float) * (input_size + 2)); 30 | } 31 | 32 | virtual ~FFTPlan() 33 | { 34 | av_freep(&this->input); 35 | } 36 | 37 | int get_input_size() const { return this->input_size; } 38 | int get_output_size() const { return this->output_size; } 39 | float get_input(int i) const { return this->input[i]; } 40 | void set_input(int i, float v) { this->input[i] = v; } 41 | float get_output(int i) const { return this->output[i]; } 42 | void set_output(int i, float v) { this->output[i] = v; } 43 | 44 | virtual void execute() = 0; 45 | 46 | protected: 47 | float *get_input() { return this->input; } 48 | 49 | private: 50 | int input_size; 51 | int output_size; 52 | float *input; 53 | std::vector output; 54 | }; 55 | -------------------------------------------------------------------------------- /src/spek-palette.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include "spek-palette.h" 5 | 6 | // Modified version of Dan Bruton's algorithm: 7 | // http://www.physics.sfasu.edu/astro/color/spectra.html 8 | static uint32_t spectrum(double level) 9 | { 10 | level *= 0.6625; 11 | double r = 0.0, g = 0.0, b = 0.0; 12 | if (level >= 0 && level < 0.15) { 13 | r = (0.15 - level) / (0.15 + 0.075); 14 | g = 0.0; 15 | b = 1.0; 16 | } else if (level >= 0.15 && level < 0.275) { 17 | r = 0.0; 18 | g = (level - 0.15) / (0.275 - 0.15); 19 | b = 1.0; 20 | } else if (level >= 0.275 && level < 0.325) { 21 | r = 0.0; 22 | g = 1.0; 23 | b = (0.325 - level) / (0.325 - 0.275); 24 | } else if (level >= 0.325 && level < 0.5) { 25 | r = (level - 0.325) / (0.5 - 0.325); 26 | g = 1.0; 27 | b = 0.0; 28 | } else if (level >= 0.5 && level < 0.6625) { 29 | r = 1.0; 30 | g = (0.6625 - level) / (0.6625 - 0.5f); 31 | b = 0.0; 32 | } 33 | 34 | // Intensity correction. 35 | double cf = 1.0; 36 | if (level >= 0.0 && level < 0.1) { 37 | cf = level / 0.1; 38 | } 39 | cf *= 255.0; 40 | 41 | // Pack RGB values into a 32-bit uint. 42 | uint32_t rr = (uint32_t) (r * cf + 0.5); 43 | uint32_t gg = (uint32_t) (g * cf + 0.5); 44 | uint32_t bb = (uint32_t) (b * cf + 0.5); 45 | return (rr << 16) + (gg << 8) + bb; 46 | } 47 | 48 | // The default palette used by SoX and written by Rob Sykes. 49 | static uint32_t sox(double level) 50 | { 51 | double r = 0.0; 52 | if (level >= 0.13 && level < 0.73) { 53 | r = sin((level - 0.13) / 0.60 * M_PI / 2.0); 54 | } else if (level >= 0.73) { 55 | r = 1.0; 56 | } 57 | 58 | double g = 0.0; 59 | if (level >= 0.6 && level < 0.91) { 60 | g = sin((level - 0.6) / 0.31 * M_PI / 2.0); 61 | } else if (level >= 0.91) { 62 | g = 1.0; 63 | } 64 | 65 | double b = 0.0; 66 | if (level < 0.60) { 67 | b = 0.5 * sin(level / 0.6 * M_PI); 68 | } else if (level >= 0.78) { 69 | b = (level - 0.78) / 0.22; 70 | } 71 | 72 | // Pack RGB values into a 32-bit uint. 73 | uint32_t rr = (uint32_t) (r * 255.0 + 0.5); 74 | uint32_t gg = (uint32_t) (g * 255.0 + 0.5); 75 | uint32_t bb = (uint32_t) (b * 255.0 + 0.5); 76 | return (rr << 16) + (gg << 8) + bb; 77 | } 78 | 79 | static uint32_t mono(double level) 80 | { 81 | uint32_t v = (uint32_t) (level * 255.0 + 0.5); 82 | return (v << 16) + (v << 8) + v; 83 | } 84 | 85 | uint32_t spek_palette(enum palette palette, double level) { 86 | switch (palette) { 87 | case PALETTE_SPECTRUM: 88 | return spectrum(level); 89 | case PALETTE_SOX: 90 | return sox(level); 91 | case PALETTE_MONO: 92 | return mono(level); 93 | default: 94 | assert(false); 95 | return 0; 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /src/spek-palette.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | enum palette { 6 | PALETTE_SPECTRUM, 7 | PALETTE_SOX, 8 | PALETTE_MONO, 9 | PALETTE_COUNT, 10 | PALETTE_DEFAULT = PALETTE_SPECTRUM, 11 | }; 12 | 13 | uint32_t spek_palette(enum palette palette, double level); 14 | -------------------------------------------------------------------------------- /src/spek-pipeline.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | class AudioFile; 7 | class FFTPlan; 8 | struct spek_pipeline; 9 | 10 | enum window_function { 11 | WINDOW_HANN, 12 | WINDOW_HAMMING, 13 | WINDOW_BLACKMAN_HARRIS, 14 | WINDOW_COUNT, 15 | WINDOW_DEFAULT = WINDOW_HANN, 16 | }; 17 | 18 | typedef void (*spek_pipeline_cb)(int bands, int sample, float *values, void *cb_data); 19 | 20 | struct spek_pipeline * spek_pipeline_open( 21 | std::unique_ptr file, 22 | std::unique_ptr fft, 23 | int stream, 24 | int channel, 25 | enum window_function window_function, 26 | int samples, 27 | spek_pipeline_cb cb, 28 | void *cb_data 29 | ); 30 | 31 | void spek_pipeline_start(struct spek_pipeline *pipeline); 32 | void spek_pipeline_close(struct spek_pipeline *pipeline); 33 | 34 | std::string spek_pipeline_desc(const struct spek_pipeline *pipeline); 35 | int spek_pipeline_streams(const struct spek_pipeline *pipeline); 36 | int spek_pipeline_channels(const struct spek_pipeline *pipeline); 37 | double spek_pipeline_duration(const struct spek_pipeline *pipeline); 38 | int spek_pipeline_sample_rate(const struct spek_pipeline *pipeline); 39 | -------------------------------------------------------------------------------- /src/spek-platform.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #ifdef OS_OSX 4 | #include 5 | #endif 6 | 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | #include "spek-platform.h" 13 | 14 | void spek_platform_init() 15 | { 16 | #ifdef OS_OSX 17 | ProcessSerialNumber PSN = {0, kCurrentProcess}; 18 | TransformProcessType(&PSN, kProcessTransformToForegroundApplication); 19 | #endif 20 | } 21 | 22 | wxString spek_platform_config_path(const wxString& app_name) 23 | { 24 | #ifdef OS_WIN 25 | wxFileName file_name(wxStandardPaths::Get().GetUserConfigDir(), wxEmptyString); 26 | #else 27 | wxFileName file_name; 28 | wxString xdg_config_home; 29 | if (wxGetEnv("XDG_CONFIG_HOME", &xdg_config_home) && !xdg_config_home.IsEmpty()) { 30 | file_name = wxFileName(xdg_config_home, wxEmptyString); 31 | } else { 32 | file_name = wxFileName(wxGetHomeDir(), wxEmptyString); 33 | file_name.AppendDir(".config"); 34 | } 35 | #endif 36 | file_name.AppendDir(app_name); 37 | file_name.Mkdir(0755, wxPATH_MKDIR_FULL); 38 | file_name.SetFullName("preferences"); 39 | return file_name.GetFullPath(); 40 | } 41 | 42 | bool spek_platform_can_change_language() 43 | { 44 | #ifdef OS_UNIX 45 | return false; 46 | #else 47 | return true; 48 | #endif 49 | } 50 | 51 | double spek_platform_font_scale() 52 | { 53 | #ifdef OS_OSX 54 | return 1.3; 55 | #else 56 | return 1.0; 57 | #endif 58 | } 59 | 60 | double spek_platform_dpi_scale() 61 | { 62 | #ifdef OS_WIN 63 | static double factor = wxWindow().GetDPIScaleFactor(); 64 | return factor; 65 | #else 66 | return 1.0; 67 | #endif 68 | } 69 | -------------------------------------------------------------------------------- /src/spek-platform.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | // Platform-specific initialisation code. 6 | void spek_platform_init(); 7 | 8 | // Not quite XDG-compatible, but close enough. 9 | wxString spek_platform_config_path(const wxString& app_name); 10 | 11 | // Setting non-default locale under GTK+ is tricky (see e.g. how FileZilla does it). We will 12 | // just disable the language setting for GTK+ users and will always use the system locale. 13 | bool spek_platform_can_change_language(); 14 | 15 | // Fonts are smaller on OSX. 16 | double spek_platform_font_scale(); 17 | 18 | // Gets DPI scale factor. 19 | double spek_platform_dpi_scale(); 20 | -------------------------------------------------------------------------------- /src/spek-preferences-dialog.cc: -------------------------------------------------------------------------------- 1 | #include "spek-platform.h" 2 | #include "spek-preferences.h" 3 | 4 | #include "spek-preferences-dialog.h" 5 | 6 | // List all languages with a decent (e.g. 80%) number of translated 7 | // strings. Don't translate language names. Keep the first line intact. 8 | static const char *available_languages[] = 9 | { 10 | "", "", 11 | "bs", "Bosanski", 12 | "ca", "Català", 13 | "cs", "Čeština", 14 | "da", "Dansk", 15 | "de", "Deutsch", 16 | "el", "Ελληνικά", 17 | "en", "English", 18 | "eo", "Esperanto", 19 | "es", "Español", 20 | "fi", "Suomi", 21 | "fr", "Français", 22 | "gl", "Galego", 23 | "he", "עִבְרִית", 24 | "hu", "Magyar nyelv", 25 | "id", "Bahasa Indonesia", 26 | "it", "Italiano", 27 | "ja", "日本語", 28 | "ko", "한국어/韓國語", 29 | "lv", "Latviešu", 30 | "nb", "Norsk (bokmål)", 31 | "nl", "Nederlands", 32 | "pl", "Polski", 33 | "pt_BR", "Português brasileiro", 34 | "ru", "Русский", 35 | "sk", "Slovenčina", 36 | "sr@latin", "Srpski", 37 | "sv", "Svenska", 38 | "th", "ภาษาไทย", 39 | "tr", "Türkçe", 40 | "uk", "Українська", 41 | "vi", "Tiếng Việt", 42 | "zh_CN", "中文(简体)", 43 | "zh_TW", "中文(台灣)", 44 | NULL 45 | }; 46 | 47 | #define ID_LANGUAGE (wxID_HIGHEST + 1) 48 | #define ID_CHECK_UPDATE (wxID_HIGHEST + 2) 49 | #define ID_CHECK_FULL_PATH (wxID_HIGHEST + 3) 50 | #define ID_CHECK_DETAILED_DESCRIPTION (wxID_HIGHEST + 4) 51 | 52 | BEGIN_EVENT_TABLE(SpekPreferencesDialog, wxDialog) 53 | EVT_CHOICE(ID_LANGUAGE, SpekPreferencesDialog::on_language) 54 | EVT_CHECKBOX(ID_CHECK_UPDATE, SpekPreferencesDialog::on_check_update) 55 | EVT_CHECKBOX(ID_CHECK_FULL_PATH, SpekPreferencesDialog::on_check_hide_full_path) 56 | EVT_CHECKBOX(ID_CHECK_DETAILED_DESCRIPTION, SpekPreferencesDialog::on_check_show_detailed_description) 57 | END_EVENT_TABLE() 58 | 59 | SpekPreferencesDialog::SpekPreferencesDialog(wxWindow *parent) : 60 | wxDialog(parent, -1, _("Preferences")) 61 | { 62 | for (int i = 0; available_languages[i]; ++i) { 63 | this->languages.Add(wxString::FromUTF8(available_languages[i])); 64 | } 65 | this->languages[1] = _("(system default)"); 66 | 67 | wxSizer *sizer = new wxBoxSizer(wxVERTICAL); 68 | wxSizer *inner_sizer = new wxBoxSizer(wxVERTICAL); 69 | sizer->Add(inner_sizer, 1, wxALL, 12); 70 | 71 | // TRANSLATORS: The name of a section in the Preferences dialog. 72 | wxStaticText *general_label = new wxStaticText(this, -1, _("General")); 73 | wxFont font = general_label->GetFont(); 74 | font.SetWeight(wxFONTWEIGHT_BOLD); 75 | general_label->SetFont(font); 76 | inner_sizer->Add(general_label); 77 | 78 | if (spek_platform_can_change_language()) { 79 | wxSizer *language_sizer = new wxBoxSizer(wxHORIZONTAL); 80 | inner_sizer->Add(language_sizer, 0, wxLEFT | wxTOP, 12); 81 | wxStaticText *language_label = new wxStaticText(this, -1, _("Language:")); 82 | language_sizer->Add(language_label, 0, wxALIGN_CENTER_VERTICAL); 83 | 84 | wxChoice *language_choice = new wxChoice(this, ID_LANGUAGE); 85 | language_sizer->Add(language_choice, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, 12); 86 | int active_index = 0; 87 | wxString active_language = SpekPreferences::get().get_language(); 88 | for (unsigned int i = 0; i < this->languages.GetCount(); i += 2) { 89 | language_choice->Append(this->languages[i + 1]); 90 | if (this->languages[i] == active_language) { 91 | active_index = i / 2; 92 | } 93 | } 94 | language_choice->SetSelection(active_index); 95 | } 96 | 97 | wxCheckBox *check_update = new wxCheckBox(this, ID_CHECK_UPDATE, _("Check for &updates")); 98 | /* Spek-X do not support check_update */ 99 | check_update->SetValue(false); 100 | check_update->Show(false); 101 | // inner_sizer->Add(check_update, 0, wxLEFT | wxTOP, 12); 102 | // check_update->SetValue(SpekPreferences::get().get_check_update()); 103 | 104 | wxCheckBox *hide_full_path = new wxCheckBox(this, ID_CHECK_FULL_PATH, _("Show &filename only")); 105 | inner_sizer->Add(hide_full_path, 0, wxLEFT | wxTOP, 12); 106 | hide_full_path->SetValue(SpekPreferences::get().get_hide_full_path()); 107 | 108 | wxCheckBox *show_detailed_description = new wxCheckBox(this, ID_CHECK_DETAILED_DESCRIPTION, _("Show detailed &description")); 109 | inner_sizer->Add(show_detailed_description, 0, wxLEFT | wxTOP, 12); 110 | show_detailed_description->SetValue(SpekPreferences::get().get_show_detailed_description()); 111 | 112 | sizer->Add(CreateButtonSizer(wxOK), 0, wxALIGN_RIGHT | wxBOTTOM | wxRIGHT, 12); 113 | sizer->SetSizeHints(this); 114 | SetSizer(sizer); 115 | } 116 | 117 | void SpekPreferencesDialog::on_language(wxCommandEvent& event) 118 | { 119 | SpekPreferences::get().set_language(this->languages[event.GetSelection() * 2]); 120 | } 121 | 122 | void SpekPreferencesDialog::on_check_update(wxCommandEvent& event) 123 | { 124 | SpekPreferences::get().set_check_update(event.IsChecked()); 125 | } 126 | 127 | void SpekPreferencesDialog::on_check_hide_full_path(wxCommandEvent& event) 128 | { 129 | SpekPreferences::get().set_hide_full_path(event.IsChecked()); 130 | } 131 | 132 | void SpekPreferencesDialog::on_check_show_detailed_description(wxCommandEvent& event) 133 | { 134 | SpekPreferences::get().set_show_detailed_description(event.IsChecked()); 135 | } 136 | -------------------------------------------------------------------------------- /src/spek-preferences-dialog.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | class SpekPreferencesDialog : public wxDialog 6 | { 7 | public: 8 | SpekPreferencesDialog(wxWindow *parent); 9 | 10 | private: 11 | void on_language(wxCommandEvent& event); 12 | void on_check_update(wxCommandEvent& event); 13 | void on_check_hide_full_path(wxCommandEvent& event); 14 | void on_check_show_detailed_description(wxCommandEvent& event); 15 | 16 | wxArrayString languages; 17 | 18 | DECLARE_EVENT_TABLE() 19 | }; 20 | -------------------------------------------------------------------------------- /src/spek-preferences.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "spek-platform.h" 4 | 5 | #include "spek-preferences.h" 6 | 7 | SpekPreferences& SpekPreferences::get() 8 | { 9 | static SpekPreferences instance; 10 | return instance; 11 | } 12 | 13 | void SpekPreferences::init() 14 | { 15 | if (this->locale) { 16 | delete this->locale; 17 | } 18 | this->locale = new wxLocale(); 19 | 20 | #ifdef OS_WIN 21 | // Load MO files embedded in Windows executable file. 22 | wxTranslations *translation = wxTranslations::Get(); 23 | if (translation == nullptr) { 24 | translation = new wxTranslations(); 25 | wxTranslations::Set(translation); 26 | } 27 | wxResourceTranslationsLoader *loader = new wxResourceTranslationsLoader(); 28 | translation->SetLoader(loader); 29 | #endif 30 | 31 | int lang = wxLANGUAGE_DEFAULT; 32 | wxString code = this->get_language(); 33 | if (spek_platform_can_change_language() && !code.IsEmpty()) { 34 | const wxLanguageInfo *info = wxLocale::FindLanguageInfo(code); 35 | if (info) { 36 | lang = info->Language; 37 | } 38 | } 39 | this->locale->Init(lang); 40 | this->locale->AddCatalog(GETTEXT_PACKAGE); 41 | } 42 | 43 | SpekPreferences::SpekPreferences() : locale(NULL) 44 | { 45 | wxString path = spek_platform_config_path("spek"); 46 | this->config = new wxFileConfig( 47 | wxEmptyString, 48 | wxEmptyString, 49 | path, 50 | wxEmptyString, 51 | wxCONFIG_USE_LOCAL_FILE, 52 | wxConvUTF8 53 | ); 54 | } 55 | 56 | bool SpekPreferences::get_check_update() 57 | { 58 | bool result = false; 59 | this->config->Read("/update/check", &result); 60 | return result; 61 | } 62 | 63 | void SpekPreferences::set_check_update(bool value) 64 | { 65 | this->config->Write("/update/check", value); 66 | this->config->Flush(); 67 | } 68 | 69 | long SpekPreferences::get_last_update() 70 | { 71 | long result = 0; 72 | this->config->Read("/update/last", &result); 73 | return result; 74 | } 75 | 76 | void SpekPreferences::set_last_update(long value) 77 | { 78 | this->config->Write("/update/last", value); 79 | this->config->Flush(); 80 | } 81 | 82 | wxString SpekPreferences::get_language() 83 | { 84 | wxString result(""); 85 | this->config->Read("/general/language", &result); 86 | return result; 87 | } 88 | 89 | void SpekPreferences::set_language(const wxString& value) 90 | { 91 | this->config->Write("/general/language", value); 92 | this->config->Flush(); 93 | } 94 | 95 | bool SpekPreferences::get_hide_full_path() 96 | { 97 | bool result = false; 98 | this->config->Read("/general/hidepath", &result); 99 | return result; 100 | } 101 | 102 | void SpekPreferences::set_hide_full_path(bool value) 103 | { 104 | this->config->Write("/general/hidepath", value); 105 | this->config->Flush(); 106 | } 107 | 108 | bool SpekPreferences::get_show_detailed_description() 109 | { 110 | bool result = false; 111 | this->config->Read("/general/showdetails", &result); 112 | return result; 113 | } 114 | 115 | void SpekPreferences::set_show_detailed_description(bool value) 116 | { 117 | this->config->Write("/general/showdetails", value); 118 | this->config->Flush(); 119 | } 120 | 121 | int SpekPreferences::get_window_width() 122 | { 123 | int result = 640 * spek_platform_dpi_scale(); 124 | this->config->Read("/general/width", &result); 125 | return result; 126 | } 127 | 128 | int SpekPreferences::get_window_height() 129 | { 130 | int result = 480 * spek_platform_dpi_scale(); 131 | this->config->Read("/general/height", &result); 132 | return result; 133 | } 134 | -------------------------------------------------------------------------------- /src/spek-preferences.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | class SpekPreferences 7 | { 8 | public: 9 | static SpekPreferences& get(); 10 | 11 | void init(); 12 | bool get_check_update(); 13 | void set_check_update(bool value); 14 | long get_last_update(); 15 | void set_last_update(long value); 16 | wxString get_language(); 17 | void set_language(const wxString& value); 18 | bool get_hide_full_path(); 19 | void set_hide_full_path(bool value); 20 | bool get_show_detailed_description(); 21 | void set_show_detailed_description(bool value); 22 | int get_window_width(); 23 | int get_window_height(); 24 | 25 | private: 26 | SpekPreferences(); 27 | SpekPreferences(const SpekPreferences&); 28 | void operator=(const SpekPreferences&); 29 | 30 | wxLocale *locale; 31 | wxFileConfig *config; 32 | }; 33 | -------------------------------------------------------------------------------- /src/spek-ruler.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "spek-ruler.h" 4 | 5 | SpekRuler::SpekRuler( 6 | int x, int y, Position pos, wxString sample_label, 7 | int *factors, int min_units, int max_units, double spacing, 8 | double scale, double offset, formatter_cb formatter) 9 | : 10 | x(x), y(y), pos(pos), sample_label(sample_label), 11 | factors(factors), min_units(min_units), max_units(max_units), spacing(spacing), 12 | scale(scale), offset(offset), formatter(formatter) 13 | { 14 | } 15 | 16 | void SpekRuler::draw(wxDC& dc) 17 | { 18 | // Mesure the sample label. 19 | wxSize size = dc.GetTextExtent(sample_label); 20 | int len = this->pos == TOP || this->pos == BOTTOM ? size.GetWidth() : size.GetHeight(); 21 | 22 | // Select the factor to use, we want some space between the labels. 23 | int factor = 0; 24 | for (int i = 0; factors[i]; ++i) { 25 | if (fabs(this->scale * factors[i]) >= this->spacing * len) { 26 | factor = factors[i]; 27 | break; 28 | } 29 | } 30 | 31 | // Draw the ticks. 32 | this->draw_tick(dc, min_units); 33 | this->draw_tick(dc, max_units); 34 | 35 | if (factor > 0) { 36 | for (int tick = min_units + factor; tick < max_units; tick += factor) { 37 | if (fabs(this->scale * (max_units - tick)) < len * 1.2) { 38 | break; 39 | } 40 | this->draw_tick(dc, tick); 41 | } 42 | } 43 | } 44 | 45 | void SpekRuler::draw_tick(wxDC& dc, int tick) 46 | { 47 | double GAP = 10; 48 | double TICK_LEN = 4; 49 | 50 | wxString label = this->formatter(tick); 51 | int value = this->pos == TOP || this->pos == BOTTOM ? 52 | tick : this->max_units + this->min_units - tick; 53 | double p = this->offset + this->scale * (value - min_units); 54 | wxSize size = dc.GetTextExtent(label); 55 | int w = size.GetWidth(); 56 | int h = size.GetHeight(); 57 | 58 | if (this->pos == TOP) { 59 | dc.DrawText(label, this->x + p - w / 2, this->y - GAP - h); 60 | } else if (this->pos == RIGHT){ 61 | dc.DrawText(label, this->x + GAP, this->y + p - h / 2); 62 | } else if (this->pos == BOTTOM) { 63 | dc.DrawText(label, this->x + p - w / 2, this->y + GAP); 64 | } else if (this->pos == LEFT){ 65 | dc.DrawText(label, this->x - w - GAP, this->y + p - h / 2); 66 | } 67 | 68 | if (this->pos == TOP) { 69 | dc.DrawLine(this->x + p, this->y, this->x + p, this->y - TICK_LEN); 70 | } else if (this->pos == RIGHT) { 71 | dc.DrawLine(this->x, this->y + p, this->x + TICK_LEN, this->y + p); 72 | } else if (this->pos == BOTTOM) { 73 | dc.DrawLine(this->x + p, this->y, this->x + p, this->y + TICK_LEN); 74 | } else if (this->pos == LEFT) { 75 | dc.DrawLine(this->x, this->y + p, this->x - TICK_LEN, this->y + p); 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /src/spek-ruler.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | class SpekRuler 7 | { 8 | public: 9 | enum Position 10 | { 11 | TOP, 12 | RIGHT, 13 | BOTTOM, 14 | LEFT 15 | }; 16 | 17 | typedef wxString (*formatter_cb)(int unit); 18 | 19 | SpekRuler( 20 | int x, int y, Position pos, wxString sample_label, 21 | int *factors, int min_units, int max_units, double spacing, 22 | double scale, double offset, formatter_cb formatter 23 | ); 24 | 25 | void draw(wxDC& dc); 26 | 27 | protected: 28 | void draw_tick(wxDC& dc, int tick); 29 | 30 | int x; 31 | int y; 32 | Position pos; 33 | wxString sample_label; 34 | int *factors; 35 | int min_units; 36 | int max_units; 37 | double spacing; 38 | double scale; 39 | double offset; 40 | formatter_cb formatter; 41 | }; 42 | -------------------------------------------------------------------------------- /src/spek-spectrogram.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | 7 | #include "spek-palette.h" 8 | #include "spek-pipeline.h" 9 | 10 | class Audio; 11 | class FFT; 12 | class SpekHaveSampleEvent; 13 | struct spek_pipeline; 14 | 15 | class SpekSpectrogram : public wxWindow 16 | { 17 | public: 18 | SpekSpectrogram(wxFrame *parent); 19 | ~SpekSpectrogram(); 20 | void open(const wxString& path, const wxString& pngpath); 21 | void save(const wxString& path); 22 | 23 | private: 24 | void on_char(wxKeyEvent& evt); 25 | void on_paint(wxPaintEvent& evt); 26 | void on_size(wxSizeEvent& evt); 27 | void on_have_sample(wxEvent& evt); 28 | void render(wxDC& dc); 29 | 30 | void start(); 31 | void stop(); 32 | 33 | void create_palette(); 34 | 35 | static const int MIN_RANGE; 36 | static const int MAX_RANGE; 37 | static const int URANGE; 38 | static const int LRANGE; 39 | static const int FFT_BITS; 40 | static const int MIN_FFT_BITS; 41 | static const int MAX_FFT_BITS; 42 | static const int LPAD; 43 | static const int TPAD; 44 | static const int RPAD; 45 | static const int BPAD; 46 | static const int GAP; 47 | static const int RULER; 48 | 49 | std::unique_ptr