2012-11-26 4 views
10

में ऑडियो रिकॉर्ड करते समय विजुअलाइज़र कैसे करें Iroid Media Player का उपयोग करके ऑडियो चलाने के दौरान विजुअलाइज़र को कुछ लहर दिखाने के लिए पता है।एंड्रॉइड

लेकिन मैं ऑडियो रिकॉर्डिंग करते समय विजुअलाइज़र दिखाना चाहता हूं जबकि रिकॉर्डिंग मैं रैखिक लहर दिखाना चाहता हूं जो उपयोगकर्ता वॉयस बीट के आधार पर बदलता है।

एंड्रॉइड में करना संभव है।

+0

एक स्तर मीटर पर्याप्त होगा, या आपको प्रत्येक आवृत्तियों के स्तर की आवश्यकता है? – elgui

+0

मुझे ग्राफ एपीआई – koti

+0

प्लॉट द्वारा समय के बढ़ते अंतराल के साथ बाइट रिकॉर्ड किए गए प्लॉट का उपयोग करके अपने स्वयं के ग्राफ को आकर्षित करने के लिए कम से कम कुछ हरा मूल्य की आवश्यकता है .. – everlasto

उत्तर

14

हर एक्स मिलीसेकेंड अपने MediaRecorder.getMaxAmplitude() कॉल करके, आप (official documentation से) है वाला:

अधिकतम पूर्ण आयाम कि को आखिरी कॉल इस विधि के बाद से नमूना था।

फिर, आप ग्राफ को आकर्षित करने या कुछ दृश्य गुणों को बदलने के लिए वास्तविक समय में इस मान को संसाधित कर सकते हैं।
सही नहीं है, लेकिन मुझे आशा है कि यह =) में मदद करता है

संपादित करें: सिर्फ इसलिए आप जानते हैं, को पुनः प्राप्त मूल्य सभी एंड्रॉयड डिवाइस पर एक ही हो जाएगा: 0 और 32767. के बीच (मैं एक से अधिक 10k उपयोगकर्ता की रिपोर्ट जब वे mic में उड़ते हैं तो मुझे यह मूल्य दे रहा है)।

+0

नीचे दिए गए उत्तर का संदर्भ लें, मैं आपको – koti

+0

को आज़माकर फ़ाइल आउटपुट की आवश्यकता होगी .. क्या यह हो सकता है को छोड़ दिया? –

+0

नहीं, यह नहीं कर सकता है, बस रिकॉर्डर को इस तरह दें: फ़ाइल कैशडियर = getWritableCacheDir(); samplePath = cacheDir.getAbsolutePath() + "/ नमूना"; mRecorder.setOutputFile (नमूनापाथ); और जब आप पूरा कर लें तो इसे हटा दें ... – elgui

1

आपको MediaRecorder के बजाय AudioRecorder कक्षा का उपयोग करने की आवश्यकता हो सकती है।

ऑडियोआरकॉर्डर # पढ़ें (...) विधियों की जांच करें जो ऑडियो डेटा को बाइट [] पर सीधे फ़ाइल में डालने के बजाय डालते हैं।

ग्राफ पर परिवर्तन दिखाने के लिए आपको डेटा का विश्लेषण करना होगा (जो पीसीएम 8 या 16 बिट - link में एन्कोड किया गया है) और वास्तविक समय में ग्राफ को अपडेट करें।

3

दो महत्वपूर्ण बातें:

  • आप लाइव बाइट (माइक से) उन्हें प्लॉट करने के लिए inorder संख्यात्मक मान में बदलने की जरूरत है।
  • चूंकि आप रीयल-टाइम ग्राफ का उपयोग करते हैं, उन बिंदुओं को साजिश करने के लिए SurfaceView का उपयोग करें।

    Convert रिकॉर्डिंग संख्यात्मक मान बाइट्स उल्लेख: Android: Listener to record sound if any sound occurs जहां चर "अस्थायी" देखेंगे आपके ऑडियो के संख्यात्मक मान रखती है।

    प्लॉट ये संख्यात्मक मान जो आपके वाई मूल्यों को इंगित करता है बढ़ती एक्स (समय अंतराल) मूल्यों के खिलाफ साजिश रची है (0,1,2 ..) ग्राफ के रूप में इंगित करता है। SurfaceView उदा ..,

का उपयोग
//canvas.drawLine(previous X value,previous Y value,X,Y, paint); 
canvas.drawPoint(X,Y,paint); 
SurfaceHolder.unlockCanvasAndPost(canvas); 

आप सभी मूल्यों साजिश की जरूरत नहीं है, दक्षता के लिए आप अपनी स्थिति और समय के कुछ अंतराल के लिए साजिश के साथ उन मूल्यों को फ़िल्टर कर सकते हैं।

उम्मीद है कि यह मदद करता है :)