From 3ef7474842472a54f216a96f005149617701925e Mon Sep 17 00:00:00 2001 From: Renato Alcara Date: Wed, 25 Mar 2026 15:51:52 -0300 Subject: [PATCH] fix: respect caller-provided waveform for PTT audio messages (#322) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: respect caller-provided waveform for PTT audio messages When sending PTT audio with an explicit waveform, Baileys unconditionally overwrites it with getAudioWaveform() which returns undefined when audio-decode is not installed — resulting in a flat line on WhatsApp. Now only invokes getAudioWaveform() when no waveform is already provided, matching the existing pattern used for jpegThumbnail (line 241). Validated via CDP + Frida interception: WhatsApp waveform format is 64 bytes Uint8Array, values 0-99, byte-for-byte identical between Android (audio_data table) and WA Web (model-storage IDB). Ref: WhiskeySockets/Baileys#2443 Co-Authored-By: Renato Alcara --- src/Utils/messages.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Utils/messages.ts b/src/Utils/messages.ts index fe56a89e..d601f016 100644 --- a/src/Utils/messages.ts +++ b/src/Utils/messages.ts @@ -239,7 +239,7 @@ export const prepareWAMessageMedia = async ( const requiresDurationComputation = mediaType === 'audio' && typeof uploadData.seconds === 'undefined' const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') && typeof uploadData['jpegThumbnail'] === 'undefined' - const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true + const requiresWaveformProcessing = mediaType === 'audio' && uploadData.ptt === true && typeof uploadData.waveform === 'undefined' const requiresAudioBackground = options.backgroundColor && mediaType === 'audio' && uploadData.ptt === true const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation const { mediaKey, encFilePath, originalFilePath, fileEncSha256, fileSha256, fileLength } = await encryptedStream( @@ -297,7 +297,7 @@ export const prepareWAMessageMedia = async ( logger?.debug('computed audio duration') } - if (requiresWaveformProcessing) { + if (requiresWaveformProcessing && !uploadData.waveform) { uploadData.waveform = await getAudioWaveform(filePath, logger) logger?.debug('processed waveform') }