قراءة عينات مباشرة من ملف MP3 المحول باستخدام NAudio

StackOverflow https://stackoverflow.com/questions/1804489

  •  05-07-2019
  •  | 
  •  

سؤال

وأنا أحاول أن أقرأ عينات PCM من (تحويل) ملف MP3 باستخدام NAudio، لكنه فشل كما إرجاع الأسلوب Read صفر (تشير EOF) في كل مرة.

مثال: هذه قطعة من التعليمات البرمجية التي يحاول قراءة عينة 16-بت واحد، ودائما بطباعة "0":

using System;
using NAudio.Wave;

namespace NAudioMp3Test
{
    class Program
    {
        static void Main(string[] args)
        {
            using (Mp3FileReader fr = new Mp3FileReader("MySong.mp3"))
            {
                byte[] buffer = new byte[2];
                using (WaveStream pcm = WaveFormatConversionStream.CreatePcmStream(fr))
                {
                    using (WaveStream aligned = new BlockAlignReductionStream(pcm))
                    {
                        Console.WriteLine(aligned.WaveFormat);
                        Console.WriteLine(aligned.Read(buffer, 0, 2));
                    }
                }
            }
        }
    }
}

والإخراج:

16 bit PCM: 44kHz 2 channels
0

ولكن هذا الإصدار الذي يقرأ من ملف WAV يعمل بشكل جيد (كنت ايتون لتحويل MP3 إلى WAV بحيث يجب أن يحتوي على عينات مماثلة):

static void Main(string[] args)
{
    using (WaveFileReader pcm = new WaveFileReader("MySong.wav"))
    {
        byte[] buffer = new byte[2];
        using (WaveStream aligned = new BlockAlignReductionStream(pcm))
        {
            Console.WriteLine(aligned.WaveFormat);
            Console.WriteLine(aligned.Read(buffer, 0, 2));
        }
    }
}

والإخراج:

16 bit PCM: 44kHz 2 channels
2

وماذا يجري هنا؟ كلا النوعين لها نفس الأشكال موجة ذلك أتوقع أن تكون قادرة على استخدام نفس API لقراءة العينات. تعيين الخاصية Position لا يساعد أيضا.

هل كانت مفيدة؟

المحلول

وربما كنت بحاجة لقراءة في قطع أكبر. يستخدم NAudio ACM إلى إجراء تحويل من MP3 إلى WAV، وإذا العازلة التي تستهدفها ليست كبيرة بما فيه الكفاية، والترميز قد يرفض تحويل أي بيانات على الإطلاق. وبعبارة أخرى، تحتاج إلى تحويل كتلة من عينات قبل أن تتمكن من قراءة العينة الأولى.

وملفات WAV هي مسألة مختلفة كما هو لطيفة وسهلة لقراءة عينة واحدة منها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top