From 3775d34a22f8377c12d9ae61be3da9bb47580d9f Mon Sep 17 00:00:00 2001 From: Anthony GAEREMYNCK <1@anthony.sh> Date: Sat, 1 Aug 2026 14:22:40 +0200 Subject: [PATCH] feat(audio): add bitrate chip control, default bitrates, and marquee pair --- frontend/src/components/FileConfigCard.jsx | 21 +++++++++++++++++++++ frontend/src/components/FormatMarquee.jsx | 1 + frontend/src/locales/en.json | 3 ++- frontend/src/locales/fr.json | 3 ++- frontend/src/pages/HomePage.jsx | 4 ++++ 5 files changed, 30 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/FileConfigCard.jsx b/frontend/src/components/FileConfigCard.jsx index 253c7f2..dcc3d1b 100644 --- a/frontend/src/components/FileConfigCard.jsx +++ b/frontend/src/components/FileConfigCard.jsx @@ -7,6 +7,8 @@ const QUALITY_FORMATS = ['jpg', 'jpeg', 'webp', 'avif', 'tiff']; const ICON_SIZES = [16, 32, 48, 256, 512]; const DEFAULT_ICON_SIZE = 256; const ARCHIVE_COMPRESSION_FORMATS = ['zip', 'tar.gz', 'tar.bz2', '7z', 'tar.7z']; +const AUDIO_BITRATE_FORMATS = ['mp3', 'ogg', 'aac', 'm4a']; +const AUDIO_BITRATES = [128, 192, 256, 320]; function rangeProgress(value, min, max) { return `${((value - min) / (max - min)) * 100}%`; @@ -101,6 +103,25 @@ export function FileConfigCard({ item, index, t, onTargetFormatChange, onQuality /> )} + {AUDIO_BITRATE_FORMATS.includes(item.targetFormat) && ( +
+ {t('quality.bitrate')} +
+ {AUDIO_BITRATES.map((bitrate) => ( + + ))} +
+
+ )} + {item.targetFormat === 'ico' && (
{t('quality.iconSize')} diff --git a/frontend/src/components/FormatMarquee.jsx b/frontend/src/components/FormatMarquee.jsx index 17f9c6e..721460f 100644 --- a/frontend/src/components/FormatMarquee.jsx +++ b/frontend/src/components/FormatMarquee.jsx @@ -7,6 +7,7 @@ const PAIRS = [ ['ttf', 'woff'], ['epub', 'mobi'], ['rar', 'zip'], + ['wav', 'mp3'], ]; function Pill({ from, to }) { diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index 56c5a6b..51787a0 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -22,7 +22,8 @@ "label": "Quality", "compression": "Compression", "iconSize": "Icon size", - "compressPdf": "Compress as JPEG" + "compressPdf": "Compress as JPEG", + "bitrate": "Bitrate" }, "job": { "converting": "Converting...", diff --git a/frontend/src/locales/fr.json b/frontend/src/locales/fr.json index 659f4c2..a0a46b7 100644 --- a/frontend/src/locales/fr.json +++ b/frontend/src/locales/fr.json @@ -22,7 +22,8 @@ "label": "Qualité", "compression": "Compression", "iconSize": "Taille de l'icône", - "compressPdf": "Compresser en JPEG" + "compressPdf": "Compresser en JPEG", + "bitrate": "Bitrate" }, "job": { "converting": "Conversion en cours...", diff --git a/frontend/src/pages/HomePage.jsx b/frontend/src/pages/HomePage.jsx index 1c4b57b..82c108a 100644 --- a/frontend/src/pages/HomePage.jsx +++ b/frontend/src/pages/HomePage.jsx @@ -25,6 +25,10 @@ const DEFAULT_QUALITY = { 'tar.bz2': 9, '7z': 5, 'tar.7z': 5, + mp3: 192, + ogg: 192, + aac: 192, + m4a: 192, }; const DEFAULT_ICON_SIZE = 256;