मैं एक एप्लिकेशन (एंड्रॉइड पर) लिख रहा हूं जो जावा कोड और मूल कोड दोनों का उपयोग करता है। हर बार, एक ध्वनि बजानी होगी। दुर्भाग्य से, मूल कोड में ऑडियो के लिए एपीआई (या कम से कम स्थिर/आधिकारिक वाले) नहीं होते हैं, लेकिन केवल यह जानता है कि ध्वनि को चलाने की आवश्यकता है। मैंने इसे करने के दो तरीके सोचे:

  1. एक ऐसा फ़ंक्शन है जो ट्रैक (कतार या क्या नहीं) में, उन ध्वनियों का ट्रैक रखता है जिन्हें चलाने की आवश्यकता होती है। जब कॉल किया जाता है, तो यह उस ध्वनि का नाम देते हुए एक स्ट्रिंग लौटाएगा जिसे बजाने की आवश्यकता है। इस तरह, जावा कोड इस फ़ंक्शन को तब तक कॉल कर सकता है जब तक कि उसे एक खाली स्ट्रिंग न मिल जाए, जहां वह ध्वनि बजाता है।

  2. उन ध्वनियों के तार की एक सरणी लौटाएं जिन्हें बजाने की आवश्यकता है, या एक खाली सरणी यदि कोई नहीं है।

लेकिन तब मुझे एहसास हुआ कि जेएनआई कॉल्स महंगी हैं। और इन्हें अभी भी जावा कोड की आवश्यकता होगी ताकि यह सुनिश्चित हो सके कि यह सही काम कर रहा है या नहीं, यह सुनिश्चित करने के लिए। और # 1 के लिए विशेष रूप से बुरा, क्योंकि इसे खेलने के लिए छोड़ी गई प्रत्येक ध्वनि के लिए कॉल करना होगा, हालांकि मैं कल्पना करता हूं कि बहुत बुरा नहीं है।

तो, क्या जेएनआई कॉल इतने महंगे हैं कि यह संभव नहीं है? क्या मूल कोड किसी भी तरह जावा कोड को सूचित करना चाहिए जो लगता है कि जावा कोड के बिना पहले पूछे जाने की आवश्यकता है (इस प्रकार कम जेएनआई कॉल करना)। हालांकि मैंने देखा कि android opengl es 2 ndk उदाहरण में ड्रा कोड JNI के माध्यम से बहुत कुछ चला गया, और यह ठीक लग रहा था, लेकिन फिर, इसने केवल एक त्रिकोण और एक पृष्ठभूमि खींची।

मुझे यकीन नहीं है कि मैं इसे प्रोफाइल करने के बारे में कैसे जाउंगा, दोनों को बनाने और यह देखने के अलावा कि क्या बेहतर काम करता है, इसलिए मैं आपके इनपुट की बहुत सराहना करता हूं। आपका बहुत बहुत धन्यवाद।

1
Leif Andersen 12 मई 2011, 07:14

1 उत्तर

सबसे बढ़िया उत्तर

कृपया Tegra Resources से NDK के नमूने पर एक नज़र डालें।

Android SDK और NDK नमूना अनुप्रयोग और दस्तावेज़ीकरण (NV_EVENT, एक्सेलेरोमीटर, ऑडियो, JNI प्रदर्शन, OpenGL ES 2.0 और मल्टीटच)

इसमें जेएनआई ऑडियो नमूना शामिल है जिसे आप कार्यान्वित करना चाहते हैं। ओपनजीएल ईएस 2.0 नमूना और जेएनआई प्रदर्शन टेस्टकोड भी शामिल हैं।

(इसके अलावा, एनडीके के लिए ओपनएसएल ईएस ऑडियो एपीआई एंड्रॉइड 2.3 से उपलब्ध है।)

4
Kazuki Sakamoto 12 मई 2011, 07:26
Opensl es ndk साइड का उपयोग करने लायक बनाने के लिए पर्याप्त फ़ोन 2.3 नहीं चलते हैं। यद्यपि यदि मेमोरी सर्वर हैं, तो आप 2.2 पर ndk के साथ openl es का भी उपयोग कर सकते हैं, भले ही उन्होंने इसे 2.3 तक ndk में नहीं जोड़ा हो। जहां तक ​​टेग्रा रिसोर्सेज लिंक का सवाल है, कितने फोन में आवश्यक हार्डवेयर है? आपको धन्यवाद
 – 
Leif Andersen
12 मई 2011, 07:50
एनडीके नमूना केवल टेग्रा डिवाइस के लिए नहीं है। यह Tegra के लिए OpenGL ES 1.1/2.0 एक्सटेंशन को छोड़कर हर Android फ़ोन पर काम कर सकता है।
 – 
Kazuki Sakamoto
12 मई 2011, 07:55