لماذا بعض ملفات wav اللعب في c# دايركت التطبيق ولكن بعض لا ؟

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

  •  01-07-2019
  •  | 
  •  

سؤال

لقد حصلت على c# التطبيق الذي يلعب بسيطة wav ملفات من خلال directsound.مع بيانات الاختبار كان رمز عملت غرامة.ولكن عندما كنت تستخدم البيانات في العالم الحقيقي ، أنتجت جدا مفيد خطأ في إنشاء الثانوية العازلة:"ArgumentException:قيمة لا تقع ضمن النطاق المتوقع."

الاختبار wavs كان 512 معدل بت 16 بت الصوت حجم العينة ، 32kHz الصوت معدل العينة.الجديد wavs هو 1152kbps, 24bit و 48kHz على التوالي.كيف يمكنني الحصول على دايركت على التعامل مع هذه أكبر القيم ، أو إذا كان لا كيف يمكن برمجيا الكشف عن هذه القيم قبل محاولة للعب الملف ؟

انها تمكنت DirectX v9.00.1126 أنا باستخدام ، لقد تضمنت بعض نموذج التعليمة البرمجية أدناه:

using DS = Microsoft.DirectX.DirectSound;  
...  
DS.Device device = new DS.Device();
device.SetCooperativeLevel(this, CooperativeLevel.Normal);  
...
BufferDescription bufferDesc = new BufferDescription();
bufferDesc.ControlEffects = false;  
...
try
{
    SecondaryBuffer sound = new SecondaryBuffer(path, bufferDesc, device);
    sound.Play(0, BufferPlayFlags.Default);
}
...

معلومات إضافية:في العالم الحقيقي wav لن تلعب في ويندوز ميديا بلاير إما أن تخبرني الكودك اللازمة لتشغيل الملف ، في حين أنها تلعب بشكل جيد في برنامج winamp.

معلومات إضافية 2:مقارنة بايت من عمل اختبار البيانات السيئة البيانات في العالم الحقيقي ، أستطيع أن أرى ذلك في الماضي حثالة قطعة السيئة البيانات لديها "bext" قطعة ، أن الإنترنت يبلغني هي البيانات الوصفية المرتبطة بث الصوت التمديد ، في حين أن بيانات الاختبار يذهب مباشرة إلى fmt قطعة.هناك /هو/ a fmt قطعة في البيانات السيئة, لذلك أنا لا أعرف إذا كان بشدة تشكيل أو إذا كان لوادر يجب أن تبحث كذلك عن fmt البيانات.أستطيع أن أرى إن كنت أستطيع الحصول على بعض المعلومات عن هذا روج bext قسما من الناس تزويد لي البيانات - إذا لم يمكن إزالة هذا الرمز قد لا تزال تعمل.

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

المحلول

ليس كل السكان المحليين مسلم الدعم 24 بت تشغيل العينة ، وحتى عندما يفعلون ذلك في كثير من الأحيان يجب أن تكون حصرا فتح في هذا الوضع.هناك مشكلة مشابهة مع معدلات عينة.كرت الصوت قد يكون التشغيل في 44.1 كيلو هرتز ، وفي هذه الحالة 48kHz يحتاج إلى الكثافة أن يكون لعبت.

كنت قد كتبت مفتوح المصدر .صافي المكتبة الصوتية يسمى NAudio والتي سوف تسمح لك لمعرفة ما عينة معدل بت عمق معين WAV الملف.كما يقدم طرق بديلة تشغيل الصوت (مثلا ، من خلال Wav...واجهات برمجة التطبيقات) ، والقدرة على إعادة تشكيل الملفات باستخدام DMO resampler الكائن.

نصائح أخرى

بالإضافة إلى أخذ عينات المسألة, WAV هو مجرد وعاء تنسيق الصوت يمكن أن تكون مضغوطة في أي من مجموعة متنوعة من صيغ الصوت (مثل AVI هو وعاء من الفيديو).لذلك يمكن استخدام أداة مثل GSpot لمعرفة ما إذا كان الخاص بك WAV يتم ترميز في غير موحد في تثبيت الترميز.برنامج Winamp لديه المزيد من برامج الترميز المثبتة بشكل افتراضي من ومب مما يفسر Winamp يلعب و WMP لا.

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