8
votes

Changer le fichier WAV (à 16kHz et 8 bits) avec Naudio

Je veux modifier un fichier WAV en 8 kHz et 8 bits à l'aide de Naudio. xxx

mais lorsque je joue au fichier de sortie, le son n'est que sizzle. Mon code est-il correct ou ce qui ne va pas?

Si je définis les formats d'onde sur WaveFormat (44100, 16, 1), cela fonctionne bien.

Merci.


0 commentaires

3 Réponses :


19
votes

Quelques pointeurs:

  • Vous devez utiliser un waveFormatConVersionStream pour convertir réellement une profondeur d'échantillonnage / pit-bit à une autre - vous viennent de mettre l'audio d'origine dans le nouveau fichier avec le mauvais format d'onde. LI>
  • Vous devrez peut-être également convertir en deux étapes - d'abord changer la vitesse d'échantillonnage, puis changer le nombre de profondeurs de la profondeur / canal. En effet, les codecs ACM sous-jacents ne peuvent pas toujours faire la conversion que vous voulez en une seule étape. Li>
  • Vous devez utiliser WaveFilerReader pour lire votre fichier d'entrée - vous ne voulez que la partie de données audio réelle du fichier à être converties, mais vous copiez actuellement tout, y compris les morceaux de riff, comme s'il s'agissait de données audio dans le nouveau fichier.
  • 8 bits PCM L'audio sonne généralement horrible. Utilisez 16 bits ou si vous devez avoir 8 bits, utilisez G.711 U-LOIS ou une loi LI>
  • L'audio Downsampling peut entraîner des aliasings. Pour ce faire, vous devez d'abord implémenter un filtre passe-bas d'abord. Cela n'est malheureusement pas facile, mais il existe des sites qui vous aident à générer les coefficients d'un filtre passe-bas de Chebyshev pour la descente spécifique que vous effectuez. LI> ul>

    Voici un exemple de code indiquant comment convertir d'un format à un autre. N'oubliez pas que vous devrez peut-être faire la conversion en plusieurs étapes en fonction du format de votre fichier d'entrée: P>

    using (var reader = new WaveFileReader("input.wav"))
    {
        var newFormat = new WaveFormat(8000, 16, 1); 
        using (var conversionStream = new WaveFormatConversionStream(newFormat, reader))
        {
            WaveFileWriter.CreateWaveFile("output.wav", conversionStream);
        } 
    }
    


1 commentaires

Mark - Pourriez-vous élargir un peu les détails de la rédaction de la rédaction? Quelle est la raison d'utiliser un filtre ChebysHev (par opposition à Butterworth ou à un autre type de passe-passe, par exemple)? Lorsque vous descendez, faites-vous défaire, ou appliquez-vous une moyenne entre des échantillons?



3
votes

Le code suivant a résolu mon problème avec G.711 MU-Law avec une extension de fichier VOX au fichier WAV. J'ai continué à obtenir une erreur "No Riff en-tête" avec WaveFilereader Différemment.

 FileStream fileStream = new FileStream(fileName, FileMode.Open);
           var waveFormat = WaveFormat.CreateMuLawFormat(8000, 1);
           var reader = new RawSourceWaveStream(fileStream, waveFormat);
            using (WaveStream convertedStream = WaveFormatConversionStream.CreatePcmStream(reader))
            {
                WaveFileWriter.CreateWaveFile(fileName.Replace("vox", "wav"), convertedStream);
            }
           fileStream.Close();


0 commentaires

1
votes
            openFileDialog openFileDialog = new openFileDialog();
            openFileDialog.Filter = "Wave Files (*.wav)|*.wav|All Files (*.*)|*.*";
            openFileDialog.FilterIndex = 1;


            WaveFileReader reader = new NAudio.Wave.WaveFileReader(dpmFileDestPath);

            WaveFormat newFormat = new WaveFormat(8000, 16, 1);

            WaveFormatConversionStream str = new WaveFormatConversionStream(newFormat, reader);

            try
            {
                 WaveFileWriter.CreateWaveFile("C:\\Konvertierten_Dateien.wav", str);
            }
            catch (Exception ex)
            {
                 MessageBox.Show(String.Format("{0}", ex.Message));
            }
            finally
            {               
                str.Close();
            }

                 MessageBox.Show("Konvertieren ist Fertig!");
            }

0 commentaires