AudioFrequencyConverter silently turns floating-point WAV input into silence

Fermée Adaptée aux débutants
#2,932 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 2 jours

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
86/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
numpy, python
Domaine
audio-video-rtc

Piste de recherche

Commencez dans pyrit/converter/audio_frequency_converter.py, au cast immédiatement avant wavfile.write, et reproduisez le problème via convert_async avec l’exemple WAV float32 fourni. Vérifiez qu’une conversion zero-shift ne produit plus une sortie entièrement composée de zéros et que la forme d’onde en virgule flottante est préservée ou correctement mise à l’échelle vers PCM.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Describe the bug

AudioFrequencyConverter reads floating-point WAV data successfully, but casts the shifted samples directly to int16 without scaling. A valid floating-point signal whose samples have magnitude below 1 is therefore written as all-zero audio. Conversion returns successfully, so the caller receives a silent artifact rather than an error. Even shift_value=0 loses the signal.

The cast is in pyrit/converter/audio_frequency_converter.py, immediately before wavfile.write. Existing success tests exercise int16 data. This differs from #2356, which fixed stereo broadcasting.

Steps/Code to Reproduce

Run from an environment with PyRIT installed:

import asyncio
import tempfile
from pathlib import Path

import numpy as np
from scipy.io import wavfile

from pyrit.converter import AudioFrequencyConverter
from pyrit.memory import CentralMemory, SQLiteMemory


async def main_async():
    with tempfile.TemporaryDirectory() as directory:
        memory = SQLiteMemory(db_path=':memory:')
        memory.results_path = directory
        CentralMemory.set_memory_instance(memory)
        try:
            source = Path(directory) / 'float.wav'
            samples = np.array([0.0, 0.5, -0.5, 0.25], dtype=np.float32)
            wavfile.write(source, 8000, samples)
            result = await AudioFrequencyConverter(shift_value=0).convert_async(prompt=str(source))
            rate, output = wavfile.read(result.output_text)
            print('frequency:', output.dtype, output.tolist())
        finally:
            memory.dispose_engine()


asyncio.run(main_async())
Expected Results

A zero frequency shift preserves the input waveform and amplitude. Floating-point samples should either retain their representation or be correctly scaled if converted to PCM; silently truncating them is incorrect.

Actual Results
frequency: int16 [0, 0, 0, 0]

The input is float32 [0.0, 0.5, -0.5, 0.25].

Versions

Linux, Python 3.12.3, PyRIT 1.2.0.dev0 at 8934a3c4, NumPy 2.5.3, SciPy 1.18.1. Reproduced locally through the public convert_async methods with real WAV files; no model or external service is used.

Langage dominant
Python
Étoiles
4.7k
Forks
1k
Merge moyen
2 j 2 h
PR mergées (30 j)
439

Préparer son environnement

Ouvrir dans Codespaces

Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.

  • Aucun Dockerfile ni fichier Docker Compose
  • Propose un modèle de pull request
  • Aucun guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de microsoft/PyRIT

Toutes les issues de microsoft/PyRIT

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.