2009-06-23 19 views
11

मुझे कुछ ऐसा दिखना है जो ऐसा कुछ दिखता हो। दो अलग-अलग रंग नस्लीय नहीं हैं।मैं ऑडियो डेटा कैसे देख सकता हूं?

audacity on mac http://audacity.sourceforge.net/about/images/audacity-macosx.png

मैं पहले से ही दो पूर्णांक सरणियों, छोड़ दिया और सही चैनल के लिए एक-एक में एक स्टीरियो wav से ऑडियो डेटा (एक नमूना/मिलीसेकंड) है। मैंने कुछ प्रयास किए हैं लेकिन वे इस तरह के रूप में कहीं भी स्पष्ट नहीं दिखते हैं, मेरे प्रयास स्पाइकी या कॉम्पैक्ट गांठ में आते हैं।

कोई अच्छा सुझाव? मैं सी # में काम कर रहा हूं लेकिन psuedocode ठीक है।

मान लें हम

  • एक समारोह DrawLine (रंग, x1, y1, x2, y2) के साथ
  • दो पूर्णांक सरणियों है डेटा सही [] और [] लंबाई एल
  • डेटा मूल्यों के लिए छोड़ दिया 32767 और -32768

यदि आप कोई अन्य धारणा करते हैं तो बस उन्हें अपने उत्तर में लिखें।

for(i = 0; i < L - 1; i++) { 
    // What magic goes here? 
} 

इस प्रकार यह निकला जब मैंने the solution Han provided लागू किया। (केवल एक चैनल)
alt text http://www.imagechicken.com/uploads/1245877759099921200.jpg

+0

ऑडसिटी ओपन सोर्स है ताकि आप कोड देख सकें। मैं निम्नलिखित की तरह कुछ मानता हूं ... func getHeight (v) {वापसी abs (v) * 32767/viewArea.height/2); नमूनेPerPixelColumn = samples.len/viewArea.width; i = 1 देखने के लिए एरिया.विड्थ {avgV = औसत (नमूने [i-i + नमूनेPerPixelColumn]); colHeight = getHeight (avgV); अगर avgV> = 0 DrawLine (काला, i, viewArea.height/2, i, (viewArea.height/2) + colHeight) अन्य DrawLine (काला, i, viewArea.height/2, i, (viewArea.height/2) - colHeight); आपको शायद वहां कुछ गोलाकार/रेंज हैंडलिंग करने की आवश्यकता होगी लेकिन यह गिस्ट होना चाहिए। – steamer25

+0

आप इसे उत्तर में क्यों नहीं डालते हैं। – Nifle

+1

मैं आपको कुछ ऐसा देना चाहता था जो तत्काल सहायक हो सकता है लेकिन अगर इसका हिस्सा बंद हो गया तो नीचे नहीं आना चाहिए। अधिक विचार: लंबवत रेखाओं के बजाय, पिछले ग्राफ बिंदु और अगले के बीच विकर्ण खींचें ...साथ ही, यदि आप पर्याप्त ज़ूम इन करते हैं, तो आपके पास प्रति नमूना एकाधिक पिक्सेल होंगे। – steamer25

उत्तर

2

आपके पास प्रत्येक पिक्सेल के लिए 1 से अधिक नमूना होंगे। नमूनों के प्रत्येक समूह को एक पिक्सेल में मैप किए जाने के लिए, आप नमूना समूह में न्यूनतम मान से अधिकतम मान तक (लंबवत) रेखा खंड खींच सकते हैं। यदि आप प्रति पिक्सेल या उससे कम 1 नमूना में ज़ूम करते हैं, तो यह अब और काम नहीं करता है, और 'अच्छा' समाधान sinc interpolated मानों को प्रदर्शित करना होगा। क्योंकि ड्रॉलाइन एक पिक्सेल पेंट नहीं कर सकती है, इसलिए न्यूनतम और अधिकतम समान होने पर एक छोटी सी समस्या होती है। उस मामले में आप इच्छित स्थान में एक भी पिक्सेल चित्र को कॉपी कर सकता है, नीचे दिए गए कोड में के रूप में:

double samplesPerPixel = (double)L/_width; 
double firstSample = 0; 
int endSample = firstSample + L - 1; 
for (short pixel = 0; pixel < _width; pixel++) 
{ 
    int lastSample = __min(endSample, (int)(firstSample + samplesPerPixel)); 
    double Y = _data[channel][(int)firstSample]; 
    double minY = Y; 
    double maxY = Y; 
    for (int sample = (int)firstSample + 1; sample <= lastSample; sample++) 
    { 
     Y = _data[channel][sample]; 
     minY = __min(Y, minY); 
     maxY = __max(Y, maxY); 
    } 
    x = pixel + _offsetx; 
    y1 = Value2Pixel(minY); 
    y2 = Value2Pixel(maxY); 
    if (y1 == y2) 
    { 
     g->DrawImageUnscaled(bm, x, y1); 
    } 
    else 
    { 
     g->DrawLine(pen, x, y1, x, y2); 
    } 
    firstSample += samplesPerPixel; 
} 

ध्यान दें कि Value2Pixel मापता है एक पिक्सेल मूल्य के लिए एक नमूना मूल्य (y-दिशा में)।

0

आप इसके लिए R भाषा में देखना चाहेंगे। मुझे इसके साथ बहुत अधिक अनुभव नहीं है, लेकिन इसका उपयोग सांख्यिकीय विश्लेषण/विज़ुअलाइज़ेशन परिदृश्यों में काफी हद तक किया जाता है। मुझे आश्चर्य होगा कि अगर आपके द्वारा उल्लिखित चरम सीमाओं से छुटकारा पाने के लिए उनके पास कुछ आसान काम नहीं है।

और आपको इसमें अपना डेटा आयात करने में कोई परेशानी नहीं होनी चाहिए। न केवल आप फ्लैट टेक्स्ट फाइलें पढ़ सकते हैं, बल्कि इसे सी के साथ आसानी से एक्स्टेंसिबल भी बनाया जा सकता है, इसलिए शायद कुछ प्रकार का सी # इंटरफ़ेस भी है।

+0

मुझे संदेह है कि मेरे बिटमैप्स को आकर्षित करने के लिए बाहरी एप्लिकेशन को कॉल करना काम करेगा। मैं बिटमैप को कई बार अद्यतन कर रहा हूं। – Nifle

संबंधित मुद्दे