मैं एक एप्लिकेशन (एंड्रॉइड पर) लिख रहा हूं जो जावा कोड और मूल कोड दोनों का उपयोग करता है। हर बार, एक ध्वनि बजानी होगी। दुर्भाग्य से, मूल कोड में ऑडियो के लिए एपीआई (या कम से कम स्थिर/आधिकारिक वाले) नहीं होते हैं, लेकिन केवल यह जानता है कि ध्वनि को चलाने की आवश्यकता है। मैंने इसे करने के दो तरीके सोचे:
एक ऐसा फ़ंक्शन है जो ट्रैक (कतार या क्या नहीं) में, उन ध्वनियों का ट्रैक रखता है जिन्हें चलाने की आवश्यकता होती है। जब कॉल किया जाता है, तो यह उस ध्वनि का नाम देते हुए एक स्ट्रिंग लौटाएगा जिसे बजाने की आवश्यकता है। इस तरह, जावा कोड इस फ़ंक्शन को तब तक कॉल कर सकता है जब तक कि उसे एक खाली स्ट्रिंग न मिल जाए, जहां वह ध्वनि बजाता है।
उन ध्वनियों के तार की एक सरणी लौटाएं जिन्हें बजाने की आवश्यकता है, या एक खाली सरणी यदि कोई नहीं है।
लेकिन तब मुझे एहसास हुआ कि जेएनआई कॉल्स महंगी हैं। और इन्हें अभी भी जावा कोड की आवश्यकता होगी ताकि यह सुनिश्चित हो सके कि यह सही काम कर रहा है या नहीं, यह सुनिश्चित करने के लिए। और # 1 के लिए विशेष रूप से बुरा, क्योंकि इसे खेलने के लिए छोड़ी गई प्रत्येक ध्वनि के लिए कॉल करना होगा, हालांकि मैं कल्पना करता हूं कि बहुत बुरा नहीं है।
तो, क्या जेएनआई कॉल इतने महंगे हैं कि यह संभव नहीं है? क्या मूल कोड किसी भी तरह जावा कोड को सूचित करना चाहिए जो लगता है कि जावा कोड के बिना पहले पूछे जाने की आवश्यकता है (इस प्रकार कम जेएनआई कॉल करना)। हालांकि मैंने देखा कि android opengl es 2 ndk उदाहरण में ड्रा कोड JNI के माध्यम से बहुत कुछ चला गया, और यह ठीक लग रहा था, लेकिन फिर, इसने केवल एक त्रिकोण और एक पृष्ठभूमि खींची।
मुझे यकीन नहीं है कि मैं इसे प्रोफाइल करने के बारे में कैसे जाउंगा, दोनों को बनाने और यह देखने के अलावा कि क्या बेहतर काम करता है, इसलिए मैं आपके इनपुट की बहुत सराहना करता हूं। आपका बहुत बहुत धन्यवाद।
1 उत्तर
कृपया Tegra Resources से NDK के नमूने पर एक नज़र डालें।
Android SDK और NDK नमूना अनुप्रयोग और दस्तावेज़ीकरण (NV_EVENT, एक्सेलेरोमीटर, ऑडियो, JNI प्रदर्शन, OpenGL ES 2.0 और मल्टीटच)
इसमें जेएनआई ऑडियो नमूना शामिल है जिसे आप कार्यान्वित करना चाहते हैं। ओपनजीएल ईएस 2.0 नमूना और जेएनआई प्रदर्शन टेस्टकोड भी शामिल हैं।
(इसके अलावा, एनडीके के लिए ओपनएसएल ईएस ऑडियो एपीआई एंड्रॉइड 2.3 से उपलब्ध है।)
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।