سؤال

إليك ما أريد أن أفعله:

أريد السماح للمستخدم بإعطاء برنامجي بعض البيانات الصوتية (من خلال إدخال الميكروفون)، ثم الاحتفاظ بها لمدة 250 مللي ثانية، ثم إخراجها مرة أخرى من خلال مكبرات الصوت.

لقد قمت بذلك بالفعل باستخدام Java Sound API.المشكلة هي أنها بطيئة نوعا ما.يستغرق الأمر ما لا يقل عن 1-2 ثانية من وقت إصدار الصوت إلى وقت سماع الصوت مرة أخرى من مكبرات الصوت، ولم أحاول حتى تنفيذ منطق التأخير حتى الآن.من الناحية النظرية لا ينبغي أن يكون هناك أي تأخير، ولكن هناك.أتفهم أنه يتعين عليك الانتظار حتى تملأ بطاقة الصوت المخزن المؤقت الخاص بها أو أي شيء آخر، وأن حجم العينة ومعدل أخذ العينات لهما علاقة بهذا.

سؤالي هو هذا:هل يجب علي الاستمرار في مسار Java محاولًا القيام بذلك؟أريد تقليل التأخير إلى 100 مللي ثانية إن أمكن.هل لدى أي شخص خبرة في استخدام برنامج تشغيل ASIO مع Java؟من المفترض أنه أسرع ..

وأنا أيضًا من مستخدمي .NET.هل هذا منطقي بالنسبة لـ .NET بدلاً من ذلك؟ماذا عن لغة C++؟أنا أبحث عن التكنولوجيا المناسبة لاستخدامها هنا، وربما مثال جيد لكيفية القراءة/الكتابة إلى تدفقات الإدخال/الإخراج الصوتي باستخدام منصة التكنولوجيا المقترحة.شكرا لمساعدتك!

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

المحلول

ولقد استعملت JavaSound في الماضي، ووجدت أنها قشاري رائعة (ويبقى تغيير بين الإصدارات VM). إذا كنت مثل C #، واستخدامها، ومجرد استخدام واجهات برمجة التطبيقات دايركت. وهنا مثال للقيام نوع ما تريد القيام به باستخدام دايركت وC #. هل يمكن استخدام تأثيرات المحمول الخاص بك لإجراء 250 مللي صدى.

<وأ href = "http://blogs.microsoft.co.il/blogs/tamir/archive/2008/12/25/capturing-and-streaming-sound-by-using-directsound-with-c. ASPX "يختلط =" نوفولو noreferrer "> http://blogs.microsoft.co.il/blogs/tamir/archive/2008/12/25/capturing-and-streaming-sound-by-using-directsound-with-c .aspx اتصال

نصائح أخرى

وأنت قد ترغب في النظر في JACK ، وهو API الصوت مصممة لمعالجة الصوت متدنية الكمون. بالإضافة إلى ذلك، وجوجل حتى تتحول هذه عرض أنيق [PDF] حول استخدام JACK مع جافا .

<اقتباس فقرة>   

ونظريا ينبغي أن يكون هناك أي تأخير، ولكن هناك.

حسنا، أنه من المستحيل أن يكون تأخير صفر. وأفضل ما يمكن أن نأمله هو تأخير ملحوظ (من حيث الإدراك البشري). ويمكن أن يساعد إذا كنت تصف الخوارزمية الأساسية الخاصة بك لقراءة وكتابة البيانات الصوتية، حتى يتمكن الناس من التعرف على المشاكل المحتملة.

وهناك مشكلة محتملة مع استخدام لغة تجمع القمامة مثل جافا هي أن GC سيتم تشغيل بشكل دوري، مقاطعة معالجة للحصول على بعض مبلغ التعسفي من الزمن. ومع ذلك، سأشعر بالدهشة اذا كان> 100MS في الاستخدام العادي. إذا GC مشكلة، وتوفر معظم JVMs الخوارزميات جمع بديلة يمكنك أن تجرب.

إذا اخترت أن يذهب إلى أسفل C / C ++ المسار، أنا أوصي باستخدام بورت اوديو ( http://portaudio.com/ ). وهي تعمل مع كل شيء تقريبا على منصات متعددة وأنها تعطيك السيطرة على مستوى منخفض من برامج تشغيل الصوت دون الحاجة فعلا للتعامل مع مختلف التقنيات سائق الصوت ما هو حولها.

ولقد استعملت بورت اوديو على مشاريع متعددة، وهذا هو الفرح الحقيقي لاستخدامها. والترخيص هو متساهل.

إذا الكمون المنخفض هو هدفك، لا يمكنك الفوز C.

libsoundio : عبارة عن مكتبة C على مستوى منخفض في الوقت الحقيقي إدخال الصوت والإخراج. بل انه يأتي مع البرنامج المثال أن يفعل بالضبط ما تريد - الأنابيب مدخلات الميكروفون لإخراج المتحدثين

من المؤكد أنه يمكن تحقيقه مع جافا ساوند للحصول على زمن وصول نهائي في الملعب يبلغ 100-150 مللي ثانية.

  1. السبب الرئيسي لزمن الوصول هو أحجام المخزن المؤقت لخطوط الالتقاط والتشغيل.يتم ضبط الحجم عند فتح الخطوط:

    • يأسر: TargetDataLine#open(AudioFormat format, int bufferSize)
    • التشغيل: SourceDataLine#open(AudioFormat format, int bufferSize)

إذا كان المخزن المؤقت كبيرًا جدًا، فسيتسبب في زمن انتقال زائد، ولكن إذا كان صغيرًا جدًا، فسيؤدي إلى تلعثم في التشغيل.لذلك تحتاج إلى إيجاد توازن بين احتياجات تطبيقاتك وقوة الحوسبة لديك.

يمكن التحقق من حجم المخزن المؤقت الافتراضي DataLine#getBufferSize عند الاتصال #open(AudioFormat format).سيختلف الحجم الافتراضي بناءً على AudioFormat ويبدو أنه موجه لتطبيقات التشغيل ذات زمن الاستجابة العالي والخالية من التباطؤ (على سبيل المثال.تدفق الإنترنت).إذا كنت تقوم بتطوير تطبيق ذو زمن استجابة منخفض، فإن حجم المخزن المؤقت الافتراضي كبير جدًا ويجب تغييره.

في اختباري باستخدام PCM 16 بت AudioFormat, ، كان حجم المخزن المؤقت الذي يبلغ 1024 بايت قريبًا جدًا من الحجم المثالي لزمن الوصول المنخفض.

  1. السبب الثاني والذي غالبًا ما يتم تجاهله لتأخر الصوت هو أي نشاط آخر يتم إجراؤه في سلاسل الالتقاط أو التشغيل.على سبيل المثال، يمكن أن يؤدي تسجيل الرسائل إلى وحدة التحكم إلى توفير زمن وصول يصل إلى 10 مللي ثانية.أطفئه.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top