diff --git a/README.md b/README.md index dba8c21..5cecce7 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Privacy-first audio tools that run entirely in your browser. No uploads, no acco | **Audio Joiner** | [/audio-joiner/](https://audiotools.dev/audio-joiner/) | Web Audio API, crossfade | | **Audio Compressor** | [/audio-compressor/](https://audiotools.dev/audio-compressor/) | Web Audio API + Mediabunny MP3 | -Chinese pages: [/zh/](https://audiotools.dev/zh/), [/zh/converter/](https://audiotools.dev/zh/converter/), and /zh/ versions of Volume Booster, Text to Speech, Audio Joiner and Audio Compressor. +Chinese pages: [/zh/](https://audiotools.dev/zh/) and a /zh/ version of every tool, for example [/zh/converter/](https://audiotools.dev/zh/converter/) and [/zh/voice-to-text/](https://audiotools.dev/zh/voice-to-text/). ## Architecture @@ -57,7 +57,7 @@ audiotools.dev/ - `python3 scripts/seo_sync.py` rewrites the FAQPage JSON-LD on every page from the FAQ that is visible on that page, and refreshes `` in `sitemap.xml` from git. Run it after editing a FAQ or a page (needs `beautifulsoup4`). - CI (`.github/workflows/seo-check.yml`) runs `scripts/seo_sync.py --check` and fails if the markup and the visible FAQ drift apart. -- `python3 scripts/build_zh.py` rebuilds the Chinese tool pages (volume booster, text to speech, joiner, compressor) from the English ones with the translation tables in the script, and keeps hreflang, the 中文/EN switch and the Chinese navigation in step. It stops if an English string it translates has changed, and runs `scripts/seo_sync.py` at the end. +- `python3 scripts/build_zh.py` rebuilds the Chinese tool pages (all tools except the converter, which is maintained by hand) from the English ones with the translation tables in the script, and keeps hreflang, the 中文/EN switch and the Chinese navigation in step. It stops if an English string it translates has changed, and runs `scripts/seo_sync.py` at the end. - `python3 scripts/build_landing.py` rebuilds the format pages (`/mp4-to-mp3/`, `/video-to-mp3/`, `/mp3-to-wav/`, `/wav-to-mp3/` and their `/zh/` versions) from the converter pages: same code, own copy and FAQ, output format preselected via ``. Run it after changing a converter page; it also refreshes the "Popular conversions" links on the converters and runs `seo_sync.py`. - Social preview images live in `og/` (1200×630, one per tool). diff --git a/assistant.js b/assistant.js index 721c051..d599ad9 100644 --- a/assistant.js +++ b/assistant.js @@ -148,7 +148,8 @@ const takePending = () => store('readwrite', (s) => { const g = s.get('pending'); s.delete('pending'); return g; }); // ---------- tool pages: "continue with this file" after a result ---------- - const ZH_PAGES = ['converter', 'volume-booster', 'text-to-speech', 'audio-joiner', 'audio-compressor']; // tools with a Chinese page + const ZH_PAGES = ['converter', 'volume-booster', 'text-to-speech', 'audio-joiner', 'audio-compressor', + 'audio-trimmer', 'audio-speed-changer', 'voice-to-text']; // tools with a Chinese page const NEXT = [['audio-compressor', 'Compress', '压缩'], ['audio-trimmer', 'Trim', '剪辑'], ['volume-booster', 'Boost volume', '增强音量'], ['converter', 'Convert format', '转换格式'], ['audio-speed-changer', 'Change speed', '变速'], ['audio-joiner', 'Join with more', '合并']]; window.offerNext = function (tool, anchor, file) { @@ -204,16 +205,16 @@ 'volume-booster': { url: ZH ? '/zh/volume-booster/' : '/volume-booster/', name: T('Volume Booster', '音量增强'), kw: ['quiet', 'louder', 'volume', 'boost', 'normalize', 'amplify', 'gain', 'тих', 'громк', 'громч', 'усил', 'нормализ', '音量', '声音太小', '太小声', '放大', '增强', '标准化'] }, - 'audio-trimmer': { url: '/audio-trimmer/', name: T('Audio Trimmer', '音频剪辑'), + 'audio-trimmer': { url: ZH ? '/zh/audio-trimmer/' : '/audio-trimmer/', name: T('Audio Trimmer', '音频剪辑'), kw: ['trim', 'cut', 'crop', 'shorten', 'ringtone', 'clip', 'remove the start', 'remove the end', 'обрез', 'обреж', 'вырез', 'отрез', 'отреж', 'рингтон', 'укорот', '剪辑', '裁剪', '剪切', '铃声', '截取'] }, 'audio-joiner': { url: ZH ? '/zh/audio-joiner/' : '/audio-joiner/', name: T('Audio Joiner', '音频合并'), kw: ['join', 'merge', 'combine', 'concatenate', 'several files', 'multiple files', 'склеить', 'склей', 'объедин', 'соедин', 'несколько', '合并', '拼接', '连接', '多个'] }, - 'audio-speed-changer': { url: '/audio-speed-changer/', name: T('Speed Changer', '音频变速'), + 'audio-speed-changer': { url: ZH ? '/zh/audio-speed-changer/' : '/audio-speed-changer/', name: T('Speed Changer', '音频变速'), kw: ['speed', 'slow down', 'speed up', 'faster', 'slower', 'tempo', 'скорост', 'замедл', 'ускор', 'темп', '速度', '变速', '放慢', '加快', '加速', '减速'] }, - 'voice-to-text': { url: '/voice-to-text/', name: T('Voice to Text', '语音转文字'), + 'voice-to-text': { url: ZH ? '/zh/voice-to-text/' : '/voice-to-text/', name: T('Voice to Text', '语音转文字'), kw: ['transcri', 'to text', 'subtitle', 'speech to text', 'dictat', 'voice message', 'lecture', 'interview', 'расшифр', 'в текст', 'субтитр', 'голосов', 'лекци', 'диктов', '转文字', '转录', '字幕', '语音转', '听写'] }, 'text-to-speech': { url: ZH ? '/zh/text-to-speech/' : '/text-to-speech/', name: T('Text to Speech', '文字转语音'), diff --git a/audio-speed-changer/index.html b/audio-speed-changer/index.html index c81a9a8..c778190 100644 --- a/audio-speed-changer/index.html +++ b/audio-speed-changer/index.html @@ -18,6 +18,9 @@ + + + @@ -153,6 +156,7 @@ Text to Speech Voice to Text All tools + 中文 diff --git a/audio-trimmer/index.html b/audio-trimmer/index.html index 3567752..3dda9c7 100644 --- a/audio-trimmer/index.html +++ b/audio-trimmer/index.html @@ -18,6 +18,9 @@ + + + @@ -146,6 +149,7 @@ Text to Speech Voice to Text All tools + 中文 diff --git a/changelog/index.html b/changelog/index.html index 11a5ec6..4caddd1 100644 --- a/changelog/index.html +++ b/changelog/index.html @@ -72,6 +72,12 @@

Changelog

What's new on AudioTools.dev, newest first. The full history is on GitHub.

+
+

+ +

    diff --git a/llms.txt b/llms.txt index 5d8b926..9244aa1 100644 --- a/llms.txt +++ b/llms.txt @@ -25,7 +25,7 @@ - [About AudioTools.dev](https://audiotools.dev/about/): who builds it, how files stay on the device (and how to verify it in DevTools), what the site loads from the network, and how it is built. - [Changelog](https://audiotools.dev/changelog/): dated list of everything that has shipped since January 2026. - Format pages (the converter with the target format preselected): [MP4 to MP3](https://audiotools.dev/mp4-to-mp3/), [Video to MP3](https://audiotools.dev/video-to-mp3/) (MP4, MOV, MKV, WebM), [MP3 to WAV](https://audiotools.dev/mp3-to-wav/), [WAV to MP3](https://audiotools.dev/wav-to-mp3/). Chinese: /zh/mp4-to-mp3/, /zh/video-to-mp3/, /zh/mp3-to-wav/, /zh/wav-to-mp3/. -- Chinese versions: [homepage](https://audiotools.dev/zh/), [audio converter](https://audiotools.dev/zh/converter/), [volume booster](https://audiotools.dev/zh/volume-booster/), [text to speech](https://audiotools.dev/zh/text-to-speech/), [audio joiner](https://audiotools.dev/zh/audio-joiner/), [audio compressor](https://audiotools.dev/zh/audio-compressor/). +- Chinese versions: [homepage](https://audiotools.dev/zh/), [audio converter](https://audiotools.dev/zh/converter/), [volume booster](https://audiotools.dev/zh/volume-booster/), [text to speech](https://audiotools.dev/zh/text-to-speech/), [audio joiner](https://audiotools.dev/zh/audio-joiner/), [audio compressor](https://audiotools.dev/zh/audio-compressor/), [audio trimmer](https://audiotools.dev/zh/audio-trimmer/), [speed changer](https://audiotools.dev/zh/audio-speed-changer/), [voice to text](https://audiotools.dev/zh/voice-to-text/). ## Key Facts diff --git a/og/zh-audio-speed-changer.png b/og/zh-audio-speed-changer.png new file mode 100644 index 0000000..d2ac54c Binary files /dev/null and b/og/zh-audio-speed-changer.png differ diff --git a/og/zh-audio-trimmer.png b/og/zh-audio-trimmer.png new file mode 100644 index 0000000..5a5fbe6 Binary files /dev/null and b/og/zh-audio-trimmer.png differ diff --git a/og/zh-voice-to-text.png b/og/zh-voice-to-text.png new file mode 100644 index 0000000..e88c39b Binary files /dev/null and b/og/zh-voice-to-text.png differ diff --git a/scripts/build_zh.py b/scripts/build_zh.py index a4d1372..8f54df1 100644 --- a/scripts/build_zh.py +++ b/scripts/build_zh.py @@ -19,8 +19,9 @@ ROOT = Path(__file__).resolve().parent.parent SITE = 'https://audiotools.dev' -ZH_PAGES = ['converter', 'volume-booster', 'text-to-speech', 'audio-joiner', 'audio-compressor'] # tools with a Chinese page -BUILT = ['volume-booster', 'text-to-speech', 'audio-joiner', 'audio-compressor'] # built by this script +ZH_PAGES = ['converter', 'volume-booster', 'text-to-speech', 'audio-joiner', 'audio-compressor', + 'audio-trimmer', 'audio-speed-changer', 'voice-to-text'] # tools with a Chinese page +BUILT = ZH_PAGES[1:] # built by this script ZH_HREF = lambda tool: f'/zh/{tool}/' if tool in ZH_PAGES else f'/{tool}/' @@ -91,6 +92,8 @@ def build(tool, table): s = s.replace('href="/"', 'href="/zh/"') s = NAV_RE.sub(lambda m: zh_nav(tool, f'/{tool}/'), s, count=1) s = FOOTER_RE.sub(lambda m: zh_footer(tool), s, count=1) + # Yandex Metrika (Voice to Text) is there for the Russian audience of the English page only + s = re.sub(r'\n .*?\n', '\n', s, flags=re.S) out = ROOT / 'zh' / tool / 'index.html' out.parent.mkdir(parents=True, exist_ok=True) out.write_text(s, encoding='utf-8') @@ -98,15 +101,19 @@ def build(tool, table): ALLOWED = {'AudioTools.dev', 'AudioTools', 'GitHub', 'DevToolKit.site', 'Boosty', 'Roman Gordienko', 'MP3', 'WAV', 'FLAC', 'OGG', - 'M4A', 'AAC', 'WebM', 'ZIP', 'Web Audio API', 'Web Speech Synthesis API', 'Speech Synthesis API', 'dBFS', 'kbps', 'TTS', 'EN', 'Google', 'Chrome', 'Safari', 'Edge', 'Windows', 'macOS', 'Android', 'LAME', 'WebAssembly', 'PCM', 'Firefox', 'Opus', 'opus', 'Telegram', 'WhatsApp', 'iPhone'} + 'M4A', 'AAC', 'WebM', 'ZIP', 'Web Audio API', 'Web Speech Synthesis API', 'Speech Synthesis API', 'dBFS', 'kbps', 'TTS', 'EN', 'Google', 'Chrome', 'Safari', 'Edge', 'Windows', 'macOS', 'Android', 'LAME', 'WebAssembly', 'PCM', 'Firefox', 'Opus', 'opus', 'Telegram', 'WhatsApp', 'iPhone', + 'OfflineAudioContext', 'WSOLA', 'Whisper', 'Tiny', 'Base', 'Hugging Face', 'Apple', 'Wi-Fi', + 'Speech recognition error:', 'Failed to start recognition:'} def leftovers(path, s): """English words left in visible text, attributes and UI strings of a Chinese page.""" body = re.sub(r'', '', s[s.index('', '', body, flags=re.S) # language names are in their own language code = ''.join(re.findall(r'', body, re.S)) text = re.sub(r'<[^>]+>', '\n', re.sub(r'', '', body, flags=re.S)) text += '\n'.join(re.findall(r'(?:title|placeholder|aria-label|alt)="([^"]*)"', body)) + text += '\n'.join(re.findall(r'content:\s*"([^"]*)"', s)) # CSS-generated text, such as an empty-state hint strings = [t for t in re.findall(r"'([^'\n]*)'", code) if re.search(r'[A-Za-z]{3}', t) and ' ' in t.strip() and not re.search(r'[<>={}()#]', t)] words = set() for chunk in list(text.split('\n')) + strings: @@ -495,6 +502,247 @@ def update_hand_made(path, current, en_href): ("
    Not to us: AudioTools.dev has no backend. System voices run on your device; voices marked “online”, such as Chrome's “Google” voices, are processed by the browser vendor, so pick a system voice for full privacy.
    ", '
    不会发送给我们:AudioTools.dev 没有后端。系统声音在您的设备上运行;标有“在线”的声音(例如 Chrome 的“Google”声音)由浏览器厂商处理,如需完全私密,请选择系统声音。
    '), ], +'audio-trimmer': [ + ('Audio Trimmer Online — Cut MP3, WAV Free | AudioTools.dev', '在线音频剪辑 — 免费剪切 MP3、WAV | AudioTools.dev'), + ('Free online audio trimmer. Cut and trim MP3, WAV, FLAC, OGG files in your browser. Visual waveform editor, no upload required. 100% private.', + '免费在线音频剪辑:在浏览器中剪切、裁剪 MP3、WAV、FLAC、OGG 文件。可视化波形编辑,无需上传,100% 私密。'), + ('audio trimmer online, cut mp3 online, trim audio file, audio cutter, mp3 cutter free, wav trimmer, cut audio online, trim mp3 no upload', + '在线音频剪辑, 剪切MP3, 音频裁剪, MP3剪切, 音频截取, 铃声制作, 在线剪音频, 免费音频剪辑'), + ('Audio Trimmer — Cut MP3, WAV Files Online Free', '在线音频剪辑 — 免费剪切 MP3、WAV 文件'), + ('Trim and cut audio files in your browser. Visual waveform, no upload, 100% private.', '在浏览器中剪辑和裁剪音频文件。可视化波形,无需上传,100% 私密。'), + ('"name": "Audio Trimmer — AudioTools.dev"', '"name": "音频剪辑 — AudioTools.dev"'), + ('"description": "Free online audio trimmer with visual waveform editor. Cut MP3, WAV, FLAC, OGG files in your browser."', + '"description": "带可视化波形编辑的免费在线音频剪辑工具。在浏览器中剪切 MP3、WAV、FLAC、OGG 文件。"'), + ('

    Audio Trimmer

    ', '

    音频剪辑

    '), + ('

    Cut and trim audio files in your browser — visual waveform, no upload, 100% private

    ', '

    在浏览器中剪辑音频文件——可视化波形,无需上传,100% 私密

    '), + ('Start:', '开始:'), + ('End:', '结束:'), + ('id="durationBadge">0.0s selected', 'id="durationBadge">已选 0.0 秒'), + ("document.getElementById('durationBadge').textContent = sel.toFixed(1) + 's selected';", "document.getElementById('durationBadge').textContent = '已选 ' + sel.toFixed(1) + ' 秒';"), + ('onclick="preview()">Preview', 'onclick="preview()">试听'), + ('style="flex:1;">Cut & Download', 'style="flex:1;">剪切并下载'), + ('

    Free Online Audio Trimmer & Cutter

    ', '

    免费在线音频剪辑

    '), + ('

    AudioTools Audio Trimmer lets you cut any audio file directly in your browser. Drop your MP3, WAV, FLAC, or OGG file, see the waveform, drag the trim handles to select the portion you want, and download the result. No upload to any server — all processing uses the Web Audio API.

    ', + '

    AudioTools 音频剪辑可以直接在浏览器中剪切任意音频文件。拖入 MP3、WAV、FLAC 或 OGG 文件,查看波形,拖动剪辑手柄选出需要的部分,然后下载结果。不上传到任何服务器——所有处理都使用 Web Audio API。

    '), + ('

    How to Trim an Audio File

    ', '

    如何剪辑音频文件

    '), + ('

    Drop or select your audio file. A visual waveform appears with blue (start) and red (end) trim handles. Drag the handles or type exact timestamps to define your trim region. Click "Preview" to hear the selection, then "Cut & Download" to save it as MP3 or WAV.

    ', + '

    拖放或选择音频文件,会出现可视化波形以及蓝色(开始)和红色(结束)剪辑手柄。拖动手柄或输入精确时间来确定剪辑范围。点击“试听”收听所选部分,再点击“剪切并下载”保存为 MP3 或 WAV。

    '), + ('

    Supported Formats

    ', '

    支持的格式

    '), + ('

    Input: MP3, WAV, FLAC, OGG, AAC, M4A, WebM — any format your browser can decode. Output is MP3 (192 kbps) or WAV (uncompressed, lossless), your choice. The Audio Converter reads even more formats.

    ', + '

    输入:MP3、WAV、FLAC、OGG、AAC、M4A、WebM——浏览器能解码的任何格式。输出可选 MP3(192 kbps)或 WAV(无压缩、无损)。音频转换器支持更多格式。

    '), + ('

    Privacy

    ', '

    隐私

    '), + ("

    Your audio file never leaves your device. Trimming uses the Web Audio API's OfflineAudioContext to process audio entirely in your browser. There are no servers and no uploads — your audio is never collected.

    ", + '

    您的音频文件不会离开您的设备。剪辑使用 Web Audio API 的 OfflineAudioContext,完全在浏览器中处理音频。没有服务器,也不上传——我们不会收集您的音频。

    '), + ('

    Need more audio tools? Try Text to Speech for converting text to audio, or Voice to Text for speech transcription.

    ', + '

    还需要其他音频工具?试试文字转语音把文字变成语音,或用语音转文字转录语音。

    '), + ('
    How do I trim an audio file online?
    ', '
    如何在线剪辑音频文件?
    '), + ('
    Drop or select your file, drag the blue start and red end handles on the waveform, then click "Cut & Download". The trimmed file saves as MP3 or WAV.
    ', + '
    拖放或选择文件,拖动波形上蓝色的开始手柄和红色的结束手柄,然后点击“剪切并下载”。剪辑后的文件保存为 MP3 或 WAV。
    '), + ('
    Is my audio uploaded to a server?
    ', '
    我的音频会上传到服务器吗?
    '), + ('
    No. Everything runs in your browser using Web Audio API. Your file stays on your device at all times.
    ', + '
    不会。所有处理都通过 Web Audio API 在浏览器中完成,文件始终留在您的设备上。
    '), + ('
    What formats can I trim?
    ', '
    可以剪辑哪些格式?
    '), + ('
    Any format your browser supports: MP3, WAV, FLAC, OGG, AAC, M4A, WebM. Output is MP3 or WAV.
    ', + '
    浏览器支持的任何格式:MP3、WAV、FLAC、OGG、AAC、M4A、WebM。输出为 MP3 或 WAV。
    '), +], +'audio-speed-changer': [ + ('Audio Speed Changer & Slow Downer Online | AudioTools.dev', '音频变速 — 在线放慢或加快音频,不变调 | AudioTools.dev'), + ('Slow down or speed up MP3, M4A or WAV from 0.25x to 4x without changing pitch: learn a song, practise a language or listen faster. Free, no upload.', + '在 0.25 倍到 4 倍之间放慢或加快 MP3、M4A、WAV,音调不变:扒歌练琴、练外语或倍速收听。免费,无需上传。'), + ('audio speed changer, audio slow downer, slow down audio, slow down mp3, slow down m4a, slow down wav, slow down a song, speed up audio, change speed without changing pitch', + '音频变速, 变速不变调, 放慢音频, 慢速播放, MP3变速, 加快音频, 倍速播放, 扒歌, 歌曲放慢'), + ('Audio Speed Changer & Slow Downer Online', '音频变速 — 在线放慢或加快,不变调'), + ('"name":"Audio Speed Changer — AudioTools.dev"', '"name":"音频变速 — AudioTools.dev"'), + ('

    Audio Speed Changer

    ', '

    音频变速

    '), + ('

    Slow down or speed up any audio file — MP3, M4A, WAV — without changing the pitch

    ', '

    放慢或加快任意音频文件——MP3、M4A、WAV——音调保持不变

    '), + ('
    playback speed
    ', '
    播放速度
    '), + ('
    Duration: 时长:Apply & Process', '>应用并处理'), + ('id="progressText">Processing…
    ', 'id="progressText">处理中…'), + ("progressText.textContent = 'Processing…';", "progressText.textContent = '处理中…';"), + ('

    Result — 结果 — Download', 'id="downloadBtn" style="width:100%;">下载'), + ('

    Adjustable Speed
    0.25x to 4x speed with a slider and quick presets.
    ', + '
    速度可调
    0.25 倍到 4 倍,可用滑块或快捷预设。
    '), + ('
    Pitch Preservation
    WSOLA time-stretching keeps voices natural — no chipmunk effect.
    ', + '
    保持音调
    WSOLA 时间伸缩让人声保持自然,不会变尖。
    '), + ('
    Download Result
    Save the speed-adjusted audio as MP3 or WAV.
    ', + '
    下载结果
    把变速后的音频保存为 MP3 或 WAV。
    '), + ('
    All processing in your browser. Files never leave your device.
    ', '
    所有处理都在浏览器中完成,文件不会离开您的设备。
    '), + ('

    Slow down or speed up audio without changing pitch

    ', '

    放慢或加快音频,音调不变

    '), + ('

    Audio Speed Changer is an online audio slow downer and speed changer. It plays any recording from 0.25x (four times slower) to 4x faster and keeps the original pitch, so a slowed-down song stays in its key and a sped-up voice does not turn into a chipmunk. It runs in your browser: nothing is uploaded.

    ', + '

    音频变速是一个在线放慢、加快音频的工具。它能把任意录音调到 0.25 倍(慢四倍)到 4 倍速,并保持原来的音调:放慢的歌曲不跑调,加快的人声也不会变尖。它在浏览器中运行,不上传任何内容。

    '), + ('

    How to slow down an audio file

    ', '

    如何放慢音频文件

    '), + ('
  • Drop an MP3, M4A, WAV or other audio file on the box above.
  • ', '
  • 把 MP3、M4A、WAV 或其他音频文件拖到上面的框中。
  • '), + ('
  • Pick a preset (0.5x, 0.75x, 1.25x, 1.5x, 2x) or set any speed from 0.25x to 4x with the slider.
  • ', '
  • 选择预设(0.5x、0.75x、1.25x、1.5x、2x),或用滑块设置 0.25x 到 4x 之间的任意速度。
  • '), + ('
  • Click “Apply & Process” and listen to the result.
  • ', '
  • 点击“应用并处理”,试听结果。
  • '), + ('
  • Download it as MP3 or WAV.
  • ', '
  • 下载为 MP3 或 WAV。
  • '), + ('

    Slow down a song to learn it

    ', '

    放慢歌曲来扒歌练琴

    '), + ('

    Guitar solos, piano parts and drum fills are easier to learn at 0.5x–0.75x. Because the pitch stays the same, you can play along in the original key. To loop one passage, cut it out first with the audio trimmer, then slow it down here.

    ', + '

    吉他独奏、钢琴段落和鼓的加花,用 0.5x–0.75x 学起来更容易。音调不变,所以可以按原调跟着弹。想反复练某一段,先用音频剪辑把它剪出来,再到这里放慢。

    '), + ('

    Slow down speech for language learning and transcription

    ', '

    放慢语音,用于学外语和听写

    '), + ('

    At 0.75x, native speakers become much easier to follow without sounding unnatural. For typing up an interview or a lecture by hand, 0.5x–0.75x lets you keep up with the speaker.

    ', + '

    在 0.75x 下,母语者的语速更容易跟上,听起来也不别扭。手动整理采访或讲座时,0.5x–0.75x 能让您跟上说话人的节奏。

    '), + ('

    Speed up podcasts, lectures and voice messages

    ', '

    加快播客、讲座和语音消息

    '), + ('

    At 1.5x, a 60-minute lecture takes 40 minutes; at 2x, 30. The result is a shorter file you can keep and play anywhere, not just a faster player setting.

    ', + '

    1.5x 时,60 分钟的讲座只需 40 分钟;2x 时只需 30 分钟。得到的是一个更短的文件,可以保存并在任何地方播放,而不只是播放器里的倍速设置。

    '), + ('

    Pitch stays put

    ', '

    音调保持不变

    '), + ('

    A naive speed change also shifts pitch: higher when sped up, lower when slowed down. This tool uses WSOLA (Waveform Similarity Overlap-Add) time-stretching, which changes the tempo while keeping the original pitch, so voices and instruments sound natural.

    ', + '

    简单的变速会连带改变音调:加快变高,放慢变低。本工具使用 WSOLA(波形相似叠加)时间伸缩,只改变速度、保留原有音调,人声和乐器听起来都很自然。

    '), + ('

    Supported formats

    ', '

    支持的格式

    '), + ('

    MP3, M4A/AAC, WAV, FLAC, OGG and WebM: anything your browser can play. The result is saved as MP3 or WAV; for M4A or FLAC, convert it afterwards with the audio converter.

    ', + '

    MP3、M4A/AAC、WAV、FLAC、OGG 和 WebM:浏览器能播放的都可以。结果保存为 MP3 或 WAV;如需 M4A 或 FLAC,之后用音频转换器转换即可。

    '), + ('

    Want the words instead? Voice to text transcribes a recording on your device. To join several recordings first, use the audio joiner.

    ', + '

    想要文字?语音转文字可以在您的设备上转录录音。想先把几段录音连起来,请用音频合并。

    '), + ('
    How do I slow down an audio file without changing the pitch?
    ', '
    如何在不改变音调的情况下放慢音频?
    '), + ('
    Drop the file here, choose a speed below 1x (for example 0.75x) and click Apply & Process. WSOLA time-stretching keeps the original pitch; download the result as MP3 or WAV.
    ', + '
    把文件拖到这里,选择低于 1x 的速度(例如 0.75x),点击“应用并处理”。WSOLA 时间伸缩会保留原有音调;结果可下载为 MP3 或 WAV。
    '), + ('
    Can I slow down an M4A or WAV file?
    ', '
    可以放慢 M4A 或 WAV 文件吗?
    '), + ('
    Yes. MP3, M4A/AAC, WAV, FLAC, OGG and WebM all work. The result is saved as MP3 or WAV.
    ', + '
    可以。MP3、M4A/AAC、WAV、FLAC、OGG 和 WebM 都支持。结果保存为 MP3 或 WAV。
    '), + ('
    What speed is best for learning a song?
    ', '
    扒歌用什么速度最好?
    '), + ('
    Start at 0.5x–0.75x and raise the speed as the part becomes comfortable. The pitch stays the same, so you can play along in the original key.
    ', + '
    从 0.5x–0.75x 开始,熟练后再逐步提高速度。音调不变,可以按原调跟着弹。
    '), + ('
    Can I speed up a podcast or voice message?
    ', '
    可以加快播客或语音消息吗?
    '), + ('
    Yes. Choose 1.25x–2x and download the result. A 60-minute recording takes 40 minutes at 1.5x.
    ', + '
    可以。选择 1.25x–2x 并下载结果。60 分钟的录音在 1.5x 下只需 40 分钟。
    '), + ('
    Is my audio uploaded?
    No. Everything happens in your browser using the Web Audio API.
    ', + '
    我的音频会被上传吗?
    不会。所有处理都通过 Web Audio API 在您的浏览器中完成。
    '), +], +'voice-to-text': [ + ('Voice to Text — Free Private Transcription | AudioTools.dev', '语音转文字 — 免费私密转录,音频不上传 | AudioTools.dev'), + ('Transcribe voice messages, recordings and audio files to text for free. Whisper runs in your browser, so nothing is uploaded. Live dictation in 60+ languages.', + '免费把语音消息、录音和音频文件转成文字。Whisper 在浏览器中运行,不上传任何内容。支持 60 多种语言的实时听写。'), + ('voice to text, audio to text, transcribe audio to text free, speech to text online, voice message to text, mp3 to text, whisper online, dictation', + '语音转文字, 音频转文字, 录音转文字, 在线语音识别, 语音消息转文字, MP3转文字, Whisper 在线, 语音听写'), + ('Voice to Text — Free, Private Transcription in Your Browser', '语音转文字 — 在浏览器中免费、私密地转录'), + ('"name": "Voice to Text — Online Speech Transcription"', '"name": "语音转文字 — 在线语音转录"'), + ('"description": "Free online voice-to-text transcription tool supporting 60+ languages. Live dictation uses the browser Speech Recognition API; Private mode transcribes audio files and recordings with Whisper running on-device, so audio never leaves the browser."', + '"description": "免费在线语音转文字工具,支持 60 多种语言。实时听写使用浏览器的 Speech Recognition API;私密模式用在设备上运行的 Whisper 转录音频文件和录音,音频不会离开浏览器。"'), + ('"Real-time speech-to-text transcription"', '"实时语音转文字"'), + ('"On-device Whisper transcription of audio files and recordings"', '"在设备上用 Whisper 转录音频文件和录音"'), + ('"60+ language support"', '"支持 60 多种语言"'), + ('"Browser-based, no data upload"', '"基于浏览器,不上传数据"'), + ('"Copy to clipboard"', '"复制到剪贴板"'), + ('"Download as TXT"', '"下载为 TXT"'), + ('"Word and character count"', '"字数统计"'), + ('"name": "How to transcribe an audio file to text"', '"name": "如何把音频文件转成文字"'), + ('"description": "Transcribe an audio file or voice message to text with Whisper running in your browser."', '"description": "用在浏览器中运行的 Whisper 把音频文件或语音消息转成文字。"'), + ('"name": "Choose the language"', '"name": "选择语言"'), + ('"text": "Choose the spoken language at the top."', '"text": "在顶部选择录音所说的语言。"'), + ('"name": "Pick a model"', '"name": "选择模型"'), + ('"text": "In Private mode, pick a model: Tiny is faster, Base is more accurate."', '"text": "在私密模式中选择模型:Tiny 更快,Base 更准确。"'), + ('"name": "Choose the file"', '"name": "选择文件"'), + ('"text": "Click Transcribe file and choose an audio or video file, or Record & transcribe to use the microphone."', '"text": "点击“转录文件”并选择音频或视频文件,或点击“录音并转录”使用麦克风。"'), + ('"name": "Wait for the model once"', '"name": "等待模型下载(仅一次)"'), + ('"text": "The first time, the model downloads once (about 45–80 MB) and is then kept by your browser."', '"text": "首次使用时模型会下载一次(约 45–80 MB),之后由浏览器保存。"'), + ('"name": "Copy or download the text"', '"name": "复制或下载文字"'), + ('"text": "Copy the text or download it as a .txt file."', '"text": "复制文字,或下载为 .txt 文件。"'), + ('

    Voice to Text

    ', '

    语音转文字

    '), + ('

    Turn recordings, voice messages and live speech into text — free, with private on-device transcription

    ', '

    把录音、语音消息和实时说话转成文字——免费,可在设备上私密转录

    '), + ("

    Your browser doesn't support the Web Speech API. Please use Chrome, Edge, or Safari for live speech recognition, or use Private mode below — it works in any modern browser.

    ", + '

    您的浏览器不支持 Web Speech API。实时语音识别请使用 Chrome、Edge 或 Safari,或者使用下方的私密模式——它适用于任何现代浏览器。

    '), + (r'content: "Your transcription will appear here...\a\a Click \"Start Recording\" and speak into your microphone.";', + r'content: "转录文字会显示在这里…\a\a 点击“开始听写”,对着麦克风说话。";'), + ('aria-label="Select language"', 'aria-label="选择语言"'), + ('', ''), # Chinese preselected + ('● Start Recording', '● 开始听写'), + ('■ Stop', '■ 停止'), + ('
    \n Recording...', '
    \n 正在听写…'), + ('title="Settings" aria-label="Settings"', 'title="设置" aria-label="设置"'), + ('', ''), + ('Keep recording after pauses', '停顿后继续听写'), + ('', ''), + ('Add periods after detected sentence ends', '在识别到的句子结尾加句号'), + ('

    Private mode — Whisper on your device

    ', '

    私密模式 — 在您的设备上运行 Whisper

    '), + ('

    Transcribe an audio file or a recording with the Whisper speech model running entirely in your browser. Your audio never leaves your device. The model is downloaded once from Hugging Face and cached. Uses the language selected above.

    ', + '

    用完全在浏览器中运行的 Whisper 语音模型转录音频文件或录音。您的音频不会离开设备。模型从 Hugging Face 下载一次并缓存。使用上方选择的语言。

    '), + ('aria-label="Select Whisper model"', 'aria-label="选择 Whisper 模型"'), + ('>Whisper Tiny · ~45 MB · fastest', '>Whisper Tiny · 约 45 MB · 最快'), + ('>Whisper Base · ~80 MB · more accurate', '>Whisper Base · 约 80 MB · 更准确'), + ('>Transcribe file', '>转录文件'), + ('>Record & transcribe', '>录音并转录'), + ('Transcription', '转录结果'), + ('0 words', '0 词'), + ('0 chars', '0 字符'), + ('>Copy', '>复制'), + ('>Download .txt', '>下载 .txt'), + ('>Clear', '>清空'), + ('

    Transcribe audio to text for free

    ', '

    免费把音频转成文字

    '), + ("

    Voice to Text turns speech into text in two ways. Private mode transcribes audio files and recordings with the Whisper speech model running in your browser, so the audio never leaves your device. Live dictation writes down what you say in real time using your browser's speech engine. Both are free, with no account and no length limit.

    ", + '

    语音转文字有两种方式。私密模式用在浏览器中运行的 Whisper 语音模型转录音频文件和录音,音频不会离开您的设备。实时听写用浏览器的语音引擎实时记下您说的话。两种方式都免费,无需账号,没有时长限制。

    '), + ('

    How to transcribe an audio file

    ', '

    如何转录音频文件

    '), + ('
  • Choose the spoken language at the top.
  • ', '
  • 在顶部选择录音所说的语言。
  • '), + ('
  • In Private mode, pick a model: Tiny is faster, Base is more accurate.
  • ', '
  • 在私密模式中选择模型:Tiny 更快,Base 更准确。
  • '), + ('
  • Click “Transcribe file” and choose an audio or video file (MP3, WAV, M4A, OGG/Opus voice messages, MP4…), or click “Record & transcribe” to use the microphone.
  • ', + '
  • 点击“转录文件”并选择音频或视频文件(MP3、WAV、M4A、OGG/Opus 语音消息、MP4…),或点击“录音并转录”使用麦克风。
  • '), + ('
  • The first time, the model downloads once (about 45–80 MB) and is then kept by your browser.
  • ', '
  • 首次使用时模型会下载一次(约 45–80 MB),之后由浏览器保存。
  • '), + ('
  • Copy the text or download it as a .txt file.
  • ', '
  • 复制文字,或下载为 .txt 文件。
  • '), + ('

    Voice messages to text

    ', '

    语音消息转文字

    '), + ('

    Save a voice message from WhatsApp or Telegram (an .opus or .ogg file) and open it with “Transcribe file”. It is transcribed on your device, which matters for private conversations.

    ', + '

    从 WhatsApp 或 Telegram 保存语音消息(.opus 或 .ogg 文件),然后用“转录文件”打开。转录在您的设备上完成,这对私人对话很重要。

    '), + ('

    Private mode or live dictation?

    ', '

    私密模式还是实时听写?

    '), + ('
  • Private mode — for files and recordings. Runs on your device and works offline once the model is downloaded. Long recordings take a while on slower phones.
  • ', + '
  • 私密模式——适合文件和录音。在您的设备上运行,模型下载后可离线使用。在较慢的手机上,长录音需要一些时间。
  • '), + ("
  • Live dictation — text appears as you speak. Uses your browser's speech engine, which in Chrome and Safari may send the audio to Google or Apple, and needs an internet connection.
  • ", + '
  • 实时听写——边说边出文字。使用浏览器的语音引擎,在 Chrome 和 Safari 中可能会把音频发送给 Google 或 Apple,并且需要联网。
  • '), + ('

    Supported languages

    ', '

    支持的语言

    '), + ('

    Whisper understands about 100 languages, including English, Chinese, Spanish, Russian, German, French, Japanese, Korean, Arabic, Hindi and Portuguese. Live dictation supports 60+ languages and regional variants; the exact list depends on your browser.

    ', + '

    Whisper 能识别约 100 种语言,包括中文、英语、西班牙语、俄语、德语、法语、日语、韩语、阿拉伯语、印地语和葡萄牙语。实时听写支持 60 多种语言和地区变体,具体列表取决于您的浏览器。

    '), + ('

    Use cases

    ', '

    使用场景

    '), + ('
  • Notes from meetings, lectures and interviews
  • ', '
  • 会议、讲座和采访的笔记
  • '), + ('
  • Voice messages you would rather read
  • ', '
  • 不方便听、更想看的语音消息
  • '), + ('
  • Dictating emails, messages and documents
  • ', '
  • 口述邮件、消息和文档
  • '), + ('
  • A first draft of subtitles for a video
  • ', '
  • 视频字幕的初稿
  • '), + ('
  • Hands-free text input
  • ', '
  • 解放双手的文字输入
  • '), + ('

    Privacy

    ', '

    隐私

    '), + ("

    Private mode runs the Whisper model on your device: the model is downloaded once from Hugging Face, and your audio never leaves the browser. Live dictation uses the browser's speech engine, which may send audio to the browser vendor. AudioTools.dev has no backend — we never receive your audio or transcriptions.

    ", + '

    私密模式在您的设备上运行 Whisper 模型:模型从 Hugging Face 下载一次,您的音频不会离开浏览器。实时听写使用浏览器的语音引擎,可能会把音频发送给浏览器厂商。AudioTools.dev 没有后端——我们从不接收您的音频或转录文字。

    '), + ('

    Browser compatibility

    ', '

    浏览器兼容性

    '), + ('

    Private mode works in current versions of Chrome, Edge, Firefox and Safari. Live dictation works in Chrome, Edge and Safari; Firefox does not support it.

    ', + '

    私密模式适用于最新版本的 Chrome、Edge、Firefox 和 Safari。实时听写适用于 Chrome、Edge 和 Safari;Firefox 不支持。

    '), + ('

    Need the reverse? Text to speech reads text aloud. To get the sound out of a video or shrink a long recording first, use the audio converter or the audio compressor.

    ', + '

    需要反过来?文字转语音可以朗读文字。想先从视频中提取声音或缩小长录音,请用音频转换器或音频压缩。

    '), + ('

    How do I convert a voice recording to text?

    ', '

    如何把录音转成文字?

    '), + ('

    Choose the language, click “Transcribe file” in Private mode and pick the recording. Whisper transcribes it in your browser, then you can copy the text or download it as a .txt file.

    ', + '

    选择语言,在私密模式中点击“转录文件”并选择录音。Whisper 会在浏览器中转录,之后可以复制文字或下载为 .txt 文件。

    '), + ('

    Can I transcribe WhatsApp or Telegram voice messages?

    ', '

    可以转录 WhatsApp 或 Telegram 语音消息吗?

    '), + ('

    Yes. Save the voice message from the chat (an .opus or .ogg file) and open it with “Transcribe file”. It is transcribed on your device and never uploaded.

    ', + '

    可以。从聊天中保存语音消息(.opus 或 .ogg 文件),用“转录文件”打开即可。转录在您的设备上完成,绝不上传。

    '), + ('

    Is my voice data sent to a server?

    ', '

    我的语音数据会被发送到服务器吗?

    '), + ("

    Not in Private mode: Whisper runs in your browser and your audio never leaves your device. Live dictation uses the browser's speech engine, which in Chrome and Safari sends audio to Google or Apple. AudioTools.dev has no backend and stores nothing.

    ", + '

    私密模式不会:Whisper 在浏览器中运行,音频不会离开您的设备。实时听写使用浏览器的语音引擎,在 Chrome 和 Safari 中会把音频发送给 Google 或 Apple。AudioTools.dev 没有后端,不存储任何内容。

    '), + ('

    Is it free? Is there a length limit?

    ', '

    免费吗?有时长限制吗?

    '), + ('

    It is free with no limits. Long recordings simply take longer, depending on your device and the model you choose.

    ', '

    免费,没有限制。长录音只是需要更久,取决于您的设备和所选模型。

    '), + ('

    Which languages are supported?

    ', '

    支持哪些语言?

    '), + ('

    Private mode (Whisper) understands about 100 languages. Live dictation supports 60+ languages; the list depends on your browser.

    ', '

    私密模式(Whisper)能识别约 100 种语言。实时听写支持 60 多种语言,具体取决于您的浏览器。

    '), + ('

    Does it work on mobile?

    ', '

    手机上能用吗?

    '), + ('

    Yes. Both modes work in Chrome on Android and Safari on iPhone. Private mode downloads the model once (about 45–80 MB), so use Wi-Fi the first time.

    ', + '

    能。两种模式都适用于 Android 上的 Chrome 和 iPhone 上的 Safari。私密模式需要下载一次模型(约 45–80 MB),首次使用请连接 Wi-Fi。

    '), + ('

    How accurate is the transcription?

    ', '

    转录准确吗?

    '), + ('

    For clear speech, Whisper Base is accurate enough for notes and drafts; Tiny is faster but makes more mistakes. Background noise, music and several people talking at once lower accuracy.

    ', + '

    对于清晰的语音,Whisper Base 的准确度足以用于笔记和草稿;Tiny 更快但错误更多。背景噪音、音乐和多人同时说话会降低准确度。

    '), + ("`Downloading model (first time only): ${(data.loaded / 1048576).toFixed(0)} MB…`", "`正在下载模型(仅首次):${(data.loaded / 1048576).toFixed(0)} MB…`"), + ("'Transcribing on your device… (long files take a while)'", "'正在您的设备上转录…(长文件需要一些时间)'"), + ("setWhisperBusy(false, 'Done');", "setWhisperBusy(false, '完成');"), + ("showToast('Transcription failed: ' + data.message);", "showToast('转录失败:' + data.message);"), + ("'Decoding audio…'", "'正在解码音频…'"), + ("showToast('Could not decode this file. Try another format.');", "showToast('无法解码此文件,请换一种格式。');"), + ("showToast('Microphone access denied. Please allow microphone in browser settings.');", "showToast('无法使用麦克风,请在浏览器设置中允许访问麦克风。');"), + ("btn.textContent = 'Record & transcribe';", "btn.textContent = '录音并转录';"), + ("btn.textContent = '■ Stop & transcribe';", "btn.textContent = '■ 停止并转录';"), + ("'Recording… (audio stays on your device)'", "'正在录音…(音频留在您的设备上)'"), + ("showToast('Recording started');", "showToast('已开始听写');"), + ("showToast('Recording stopped');", "showToast('已停止听写');"), + # Chinese has no spaces between words: count words with Intl.Segmenter where the browser has it + (r"const words = text ? text.split(/\s+/).length : 0;", + r"const words = !text ? 0 : window.Intl && Intl.Segmenter ? [...new Intl.Segmenter('zh', { granularity: 'word' }).segment(text)].filter((w) => w.isWordLike).length : text.split(/\s+/).length;"), + ("document.getElementById('wordCount').textContent = words + ' word' + (words !== 1 ? 's' : '');", "document.getElementById('wordCount').textContent = words + ' 词';"), + ("document.getElementById('charCount').textContent = chars + ' char' + (chars !== 1 ? 's' : '');", "document.getElementById('charCount').textContent = chars + ' 字符';"), + ("showToast('Copied to clipboard!');", "showToast('已复制到剪贴板');"), + ("showToast('Downloaded!');", "showToast('已下载');"), + ("confirm('Clear all transcription text?')", "confirm('清空全部转录文字?')"), +], } diff --git a/sitemap.xml b/sitemap.xml index e71c322..c2fb790 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -14,7 +14,7 @@ https://audiotools.dev/voice-to-text/ - 2026-10-22 + 2026-10-26 monthly 0.9 @@ -26,13 +26,13 @@ https://audiotools.dev/audio-trimmer/ - 2026-10-22 + 2026-10-26 monthly 0.9 https://audiotools.dev/audio-speed-changer/ - 2026-10-22 + 2026-10-26 monthly 0.8 @@ -62,7 +62,7 @@ https://audiotools.dev/changelog/ - 2026-10-22 + 2026-10-26 weekly 0.5 @@ -80,37 +80,55 @@ https://audiotools.dev/zh/ - 2026-10-22 + 2026-10-26 weekly 0.8 https://audiotools.dev/zh/converter/ - 2026-10-22 + 2026-10-26 monthly 0.8 https://audiotools.dev/zh/volume-booster/ - 2026-10-22 + 2026-10-26 monthly 0.7 https://audiotools.dev/zh/text-to-speech/ - 2026-10-22 + 2026-10-26 monthly 0.7 https://audiotools.dev/zh/audio-joiner/ - 2026-10-22 + 2026-10-26 monthly 0.7 https://audiotools.dev/zh/audio-compressor/ - 2026-10-22 + 2026-10-26 + monthly + 0.7 + + + https://audiotools.dev/zh/audio-trimmer/ + 2026-10-26 + monthly + 0.7 + + + https://audiotools.dev/zh/audio-speed-changer/ + 2026-10-26 + monthly + 0.7 + + + https://audiotools.dev/zh/voice-to-text/ + 2026-10-26 monthly 0.7 @@ -141,25 +159,25 @@ https://audiotools.dev/zh/mp4-to-mp3/ - 2026-10-22 + 2026-10-26 monthly 0.7 https://audiotools.dev/zh/video-to-mp3/ - 2026-10-22 + 2026-10-26 monthly 0.7 https://audiotools.dev/zh/mp3-to-wav/ - 2026-10-22 + 2026-10-26 monthly 0.7 https://audiotools.dev/zh/wav-to-mp3/ - 2026-10-22 + 2026-10-26 monthly 0.7 diff --git a/voice-to-text/index.html b/voice-to-text/index.html index c421bae..587cf21 100644 --- a/voice-to-text/index.html +++ b/voice-to-text/index.html @@ -23,6 +23,9 @@ + + + @@ -486,6 +489,7 @@ Text to Speech Voice to Text All tools + 中文 diff --git a/zh/audio-compressor/index.html b/zh/audio-compressor/index.html index dd00f47..6f8af1a 100644 --- a/zh/audio-compressor/index.html +++ b/zh/audio-compressor/index.html @@ -159,7 +159,7 @@ 转换器 音量增强 文字转语音 - 语音转文字 + 语音转文字 全部工具 EN @@ -264,7 +264,7 @@

    满足邮件和聊天的大小限制

    大多数邮箱把附件限制在 20–25 MB:128 kbps 约可容纳 20–25 分钟音频,64 kbps 约 40–50 分钟。如果是语音,64 kbps 加 22050 Hz 能在最小体积下保持清晰。

    WAV 转 MP3:节省最多

    未压缩的 WAV(CD 音质)每分钟约 10.6 MB。压缩为 128 kbps 的 MP3 后约小 11 倍,对大多数用途来说几乎听不出区别。

    -

    还需要其他处理?可以先用音频合并把文件连起来,用音频剪辑去掉首尾的静音,用音量增强器让小声的录音更响,或用音频转换器保存为 M4A 或 FLAC。

    +

    还需要其他处理?可以先用音频合并把文件连起来,用音频剪辑去掉首尾的静音,用音量增强器让小声的录音更响,或用音频转换器保存为 M4A 或 FLAC。

@@ -279,7 +279,7 @@

常见问题

@@ -278,7 +278,7 @@

常见问题

@@ -461,7 +461,7 @@

常见问题

@@ -258,7 +258,7 @@

常见问题

@@ -437,7 +437,7 @@

常见问题

@@ -228,7 +228,7 @@

工作原理

拖放或选择文件,选择“标准化”或“手动放大”,然后点击“应用并处理”。音频由 Web Audio API 解码,增益在浏览器中逐个采样地应用,结果可下载为 MP3 或 WAV。不上传任何内容。

常见用途

放大手机或笔记本麦克风录下的小声语音;把各期播客标准化到统一音量;让多条音轨的音量保持一致;让声音太小的有声书章节更响亮。

-

还需要其他处理?试试音频剪辑、音频变速、音频转换器或文字转语音。

+

还需要其他处理?试试音频剪辑、音频变速、音频转换器或文字转语音。

@@ -240,7 +240,7 @@

常见问题