2011-06-30 20 views
7

के रूप में एक तरंग (फ्लोट सरणी) बजाना मेरे पास एक तरंग है जो -1 से 1 तक फ्लोट की सरणी के रूप में दर्शाया गया है। क्या इस तरंग को दोहराए गए ध्वनि के रूप में खेलना संभव होगा?ध्वनि

मुझे एक सरणी से ऑडियो खेलने के कई उदाहरण मिल गए हैं, लेकिन सभी बाइट एरे से संबंधित हैं, और कुछ बहुत ही ठोस कोड की आवश्यकता है।

उत्तर

1

इसके बारे में बहुत कुछ जानने के बिना, आप मूल्यों के लिए केवल एक सीमा क्यों निर्दिष्ट नहीं करते हैं, और इस श्रेणी को स्वर से टोन खेलते हैं।

-1 ...  1 
50Hz ... 20,000Hz 

आप आसानी से इसे इस तरह की गणना कर सकते हैं:

//input is the float array 
int minPitch = 50; 
int maxPitch = 20000; 

int pitch = (int)((input[idx] + 1) * ((maxPitch - minPitch)/2) + minPitch); 

यह आपको सरणी में मूल्य की पिच देना होगा।

1

यह मानते हुए कि आपके नाव सरणी पीसीएम डेटा रखता है, और आप 8 बिट में यह खेलना चाहते हैं, यह एक बाइट सरणी में कनवर्ट किया जाता है आसान:

   int off=(signed!=0 ? 0 : 128); 
       for(int i=0; i<samples; i++){ 
        val=(int)(pcm[i]*128. + 0.5); 
        if(val>127) 
        val=127; 
        else if(val<-128) 
        val=-128; 
        buffer[index++]=(byte)(val+off); 
       } 
       } 

इस कोड को थोड़ा JOrbis से कोड modifed है, यहाँ pcm आपकी फ्लोट की सरणी है, और buffer बाइट सरणी है।

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