मैं Visualizer कक्षा का उपयोग कर एंड्रॉइड में एक ऑडियो स्पेक्ट्रम विश्लेषक को लागू करने की कोशिश कर रहा हूं।मेरा एफएफटी विंडोज मीडिया प्लेयर की तुलना में एक अलग विज़ुअलाइज़र आउटपुट क्यों देता है?
मैं OnDataCaptureListener()
घटना के onFftDataCapture()
विधि में FFT डेटा हो रही है और मुझे लगता है कि ड्राइंग हूँ कैनवास drawLines()
के प्रयोग पर।
लेकिन स्पेक्ट्रम प्रदर्शन ठीक से प्रदर्शित नहीं हो रहा है। मैं केवल ग्राफ के बाईं ओर परिवर्तन देख सकता हूं। लेकिन विंडो मीडिया प्लेयर में, एक ही गीत का आउटपुट अलग है। मुझे क्या याद आ रहा है
क्या कोई इस पर उदाहरण या लिंक के साथ मेरी सहायता कर सकता है?
कोड
mVisualizer.setDataCaptureListener(
new Visualizer.OnDataCaptureListener() {
public void onWaveFormDataCapture(Visualizer visualizer,
byte[] bytes, int samplingRate) {}
public void onFftDataCapture(Visualizer visualizer,
byte[] bytes, int samplingRate) {
mVisualizerView.updateVisualizer(bytes, samplingRate);
}
}, Visualizer.getMaxCaptureRate()/2, false, true);
OnPaint()
for (int i = 0; i < mBytes.length/2; i++) {
mPoints[i * 4] = i * 8;
mPoints[i * 4 + 1] = 0;
mPoints[i * 4 + 2] = i * 8;
byte rfk = mBytes[2 * i];
byte ifk = mBytes[2 * i + 1];
magnitude = (float) (rfk * rfk + ifk * ifk);
int dbValue = (int) (10 * Math.log10(magnitude));
mPoints[i * 4 + 3] = (float) (dbValue * 7);
}
canvas.drawLines(mPoints, mForePaint);
कहाँ mVisualizer
विजुअलाइज़र वर्ग वस्तु है, और mBytes
onFftDataCapture
घटना से FFT डेटा मिला है।
आप ईवेंट here द्वारा लौटाए गए एफएफटी डेटा के बारे में अधिक पढ़ सकते हैं।
यह वही महत्व देता रहा onFftDataCapture()
मिलता है:
[90, -1, -27, 102, 13, -18, 40, 33, -7, 16, -23, -23, -2, -8, -11, -9, -8, -33, -29, 44, 4, -9, -15, -1, -2, -17, -7, 1, 1, 0, 3, -11, -5, 10, -24, -6, -23, 1, -9, -21, -2, 4, 9, -10, -14, -5, -16, 8, 6, -16, 14, 3, 7, 15, 10, -2, -15, -14, -5, 10, 8, 23, -1, -16, -2, -6, 4, 9, -1, 0, 0, 9, 1, 4, -2, 6, -6, -6, 8, -4, 6, 6, -4, -5, -5, -2, 3, 0, -1, 0, -7, 0, 2, 1, 0, 1, -1, 0, -1, 1, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, -1]
किसी भी विचार, लिंक उपयोगी होगा।
@Chris स्ट्रैटन
अब मैं square wave at 1000 Hz फ़ाइल खेल रहा हूँ और उस की स्क्रीन शॉट ले लिया के लिए अद्यतन। अब आप क्या सुझाव देते हैं?
@ruhalde सुझाव
अब मैं Frequency sweep (20-20000 Hz) फ़ाइल खेल रहा हूँ और उत्पादन के बाद इस फ़ाइल उत्पन्न के बाद अपडेट किया गया।
क्या आप स्पेक्ट्रम को फिर से निकालने से पहले अपने कैनवास को साफ़ कर रहे हैं? मैं बस (जंगली) अनुमान लगा रहा हूं कि टूटे हुए टुकड़े पिछले ड्रॉ से बचाए गए हैं ... –
मैं 'अद्यतन विज़ुअलाइज़र()' विधि में 'अवैध() 'को कॉल कर रहा हूं। यह वह काम कर रहा है। –
मुझे लगता है कि आपका डीबी और परिमाण सूत्र सही नहीं हैं। पहली परिमाण की गणना एसक्यूआर (2) के साथ बहुआयामी द्वारा की जाती है। डीबी में भी आपको एक सीमा से विभाजित करने की आवश्यकता है, क्योंकि डीबी हमेशा किसी चीज़ से संबंधित उपाय होता है। आप अपनी सीमा से डाइविंग नहीं कर रहे हैं, इसलिए आपकी सीमा 1 डीबी है, यही कारण है कि आपका ग्राफ इतना अजीब है। यहां http://zone.ni.com/devzone/cda/tut/p/id/4278 – ruhalde