كيف يمكن ضغط ملفات الصوت في C# في المحمولة الطريقة ؟

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

سؤال

هل هناك المحمولة ، وليس البراءة المقيدة طريقة للعب ضغط ملفات الصوت في C# / .الشبكة ؟ أريد أن ألعب قصيرة "جلجل" الأصوات على مختلف الأحداث التي تحدث في البرنامج.

النظام.وسائل الاعلام.SoundPlayer فقط يمكن التعامل مع WAV, ولكن هذه هي عادة الكبيرة إلى تضمين للتحميل apllication.MP3 محمي مع براءات الاختراع ، حتى لو كان هناك إدارتها بشكل كامل فك/لاعب لن تكون حرة في إعادة توزيع.أفضل تنسيق المتاحة ويبدو أن OGG Vorbis, ولكن لم يكن لدي أي حظ في الحصول على أي C# فوربيس المكتبات للعمل (تمكنت من استخراج الخام مع PCM csvorbis ولكن لا أعرف كيفية تشغيله بعد ذلك).

أنا لا أريد أن توزيع أي ثنائيات مع طلبي ولا تعتمد على P/الاحتجاج المشروع يجب أن تعمل على الأقل على ويندوز و لينكس.أنا بخير مع تجميع .صافي الجمعيات طالما هم رخصة متوافقة مع GPL.

[هذا السؤال هو متابعة إلى القائمة البريدية مناقشة أحادية dev القائمة البريدية قبل عام]

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

المحلول

وأخيرا إعادة النظر في هذا الموضوع, و, باستخدام مساعدة من BrokenGlass على كتابة موجة رأس, تحديث csvorbis.لقد وأضاف OggDecodeStream التي يمكن أن تنتقل إلى System.Media.SoundPlayer ببساطة تلعب أي (متوافق) Ogg Vorbis تيار.مثال على الاستخدام:

using (var file = new FileStream(oggFilename, FileMode.Open, FileAccess.Read))
{
  var player = new SoundPlayer(new OggDecodeStream(file));
  player.PlaySync();
}

'متوافق' في هذه الحالة يعني أنه يعمل عندما حاولت بها'.فك تدار بالكامل, يعمل بشكل جيد على Microsoft .نت - في الوقت الراهن ، يبدو أن هناك تراجعا في مونو هو SoundPlayer الذي يسبب التشويه.

التي عفا عليها الزمن:

System.Diagnostics.Process.Start("fullPath.mp3");

أنا مندهش ولكن طريقة دينة ذكر يعمل فعلا.ومع ذلك, كنت أفكر في اللعب القصير "جلجل" الأصوات على مختلف الأحداث التي تحدث في البرنامج ، أنا لا أريد أن إطلاق المستخدم مشغل الوسائط في كل مرة كنت بحاجة إلى القيام ping!' الصوت.

أما بالنسبة رمز المشروع الارتباط هذا هو للأسف مجرد P/استدعاء المجمع.

نصائح أخرى

أنا لا أريد أن توزيع أي ثنائيات مع طلبي ولا تعتمد على P/الاحتجاج ، يجب أن تعمل على الأقل على ويندوز ، لينكس.أنا بخير مع تجميع .صافي الجمعيات طالما هم رخصة متوافقة مع GPL.

للأسف سوف يكون من المستحيل تجنب توزيع الثنائيات, أو تجنب P/الاحتجاج.على .صافي مكتبات فئة الاستخدام P/الاحتجاج تحت على أي حال ، فإن التعليمات البرمجية المدارة على التواصل مع unmanage نظام التشغيل API في بعض نقطة في أجل لا شيء.

تحويل ملف OGG إلى PCM ينبغي أن يكون من الممكن في التعليمات البرمجية المدارة, ولكن لأنه لا يوجد الوطنية لدعم الصوت في .صافي انت حقا لديك 3 خيارات:

  1. استدعاء برنامج خارجي لتشغيل الصوت (كما ذكر سابقا)

  2. P/الاحتجاج ج وحدة لتشغيل الصوت

  3. P/استدعاء نظام التشغيل واجهات برمجة التطبيقات لتشغيل الصوت.

(4.) إذا كنت فقط تشغيل هذه التعليمات البرمجية على ويندوز ربما يمكن فقط استخدام ديريكتشو.

P/الاحتجاج يمكن استخدامها عبر منصة الطريقة http://www.mono-project.com/Interop_with_Native_Libraries#Library_Names

مرة واحدة لديك الخاص بك البيانات PCM (باستخدام OGG ج Lib أو التعليمات البرمجية المدارة ، شيء من هذا القبيل http://www.robburke.net/mle/mp3sharp/ بالطبع هناك ترخيص القضايا مع MP3), سوف تحتاج إلى طريقة اللعب, للأسف .صافي لا توفر أي مباشرة تقييم إلى بطاقة الصوت الخاصة بك أو طرق للعب تدفق الصوت.هل يمكن تحويل ملفات ogg إلى PCM عند بدء التشغيل ثم ثم استخدم النظام.وسائل الاعلام.SoundPlayer ، للعب wav الملفات التي تم إنشاؤها.الطريقة الحالية يقترح Microsoft يستخدم P/استدعاء للوصول إلى الصوت اللعب API في نظام التشغيل http://msdn.microsoft.com/en-us/library/ms229685.aspx

عبر منصة API للعب PCM الصوت OpenAL و يجب أن تكون قادرا على اللعب (PCM) الصوت باستخدام c# روابط OpenAL في www.taoframework.com سوف للأسف تحتاج إلى نسخ عدد من DLL .حتى الملفات مع التطبيق الخاص بك من أجل أن تعمل عند توزيعها ، ولكن هذا هو ، كما أوضحت في وقت سابق أمرا لا مفر منه.

دعوة الشيء الذي يقع في النظام.تشخيص' لتشغيل صوت يبدو مثل فكرة سيئة جدا بالنسبة لي.هنا هو ما هي وظيفة يعني:

    //
    // Summary:
    //     Starts a process resource by specifying the name of a document or application
    //     file and associates the resource with a new System.Diagnostics.Process component.
    //
    // Parameters:
    //   fileName:
    //     The name of a document or application file to run in the process.
    //
    // Returns:
    //     A new System.Diagnostics.Process component that is associated with the process
    //     resource, or null, if no process resource is started (for example, if an
    //     existing process is reused).
    //
    // Exceptions:
    //   System.ComponentModel.Win32Exception:
    //     There was an error in opening the associated file.
    //
    //   System.ObjectDisposedException:
    //     The process object has already been disposed.
    //
    //   System.IO.FileNotFoundException:
    //     The PATH environment variable has a string containing quotes.

أعتقد يجب أن يكون لديك نظرة fmod التي هي أم جميع audio api

من فضلك لا تتردد في الحلم عن http://www.fmod.org/index.php/download#FMODExProgrammersAPI

ال XNA الصوت واجهات برمجة التطبيقات تعمل بشكل جيد في .net/c# طلبات عمل جميل لهذا التطبيق.القائم على الحدث اثار, جنبا إلى جنب مع concurent تشغيل متعددة الأصوات.بالضبط ما تريد.أوه, والضغط كذلك.

حسنا, هذا يعتمد على براءات الاختراع في القوانين ذات الصلة في بلد معين, ولكن لا توجد طريقة كتابة mp3 فك دون انتهاك براءات الاختراع ، بقدر ما أعرف.أعتقد أن أفضل عبر منصة مفتوحة المصدر حل مشكلتك جيستريمر.وقد c# الارتباطات التي تتطور بسرعة.باستخدام وبناء جيستريمر على ويندوز ليست مهمة سهلة ولكن. هنا هو نقطة انطلاق جيدة. الشؤم المشروع يستخدم هذا النهج ، ولكنها ليست قابلة للاستخدام حقا على ويندوز بعد (ومع ذلك ، هناك بعض تقريبا يعملون ليلا يبني). FMOD هو أيضا بديل جيد.للأسف, ليس مفتوح المصدر و أجد أن API هو بطريقة أو بأخرى ج-نصب.

هناك نقية C# فوربيس فك المتوفرة مفتوحة المصدر:

http://anonsvn.mono-project.com/viewvc/trunk/csvorbis/

لست متأكدا إذا كان هذا لا تزال ذات الصلة.أبسط حل هو استخدام NAudio, وهو تمكن من فتح مصدر الصوت API مكتوب في C#.شيء آخر محاولة استخدام ffmpeg ، وخلق عملية ffplay.exe (حق الثنائيات في إطار مشترك يبني).

لا توجد وسيلة بالنسبة لك أن تفعل هذا دون استخدام أي شيء آخر من أجل اللعب الخاص بك التعامل معها.

استخدام النظام.التشخيص ستطلق خارجي البرامج و أشك في أنك ترغب في ذلك ؟ أنت فقط تريد X ملف الصوت للعب في الخلفية عندما Y يحدث في البرنامج ، أليس كذلك ؟

صوت لأنه يبدو وكأنه مسألة مثيرة للاهتمام.:D

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