2008-12-14 14 views
34

के साथ प्रारंभ करना मैं ऑडियो के साथ प्रोग्रामेटिक रूप से काम करना शुरू करने में सहायता के लिए संसाधनों, लिंक आदि की तलाश में हूं।प्रोग्रामेटिक ऑडियो

विशेष रूप से, प्लेटफॉर्म जो मैं संसाधनों से ऑडियो डेटा निकालने के लिए एपीआई का खुलासा करता हूं (जैसे एमपी 3), या ऑडियो के रूप में मनमानी डेटा को वापस चलाने के लिए। दोनों मामलों में वास्तविक डेटा 32 बिट फ्लोट्स का बाइट सरणी 44.1 केएचजेड स्टीरियो का प्रतिनिधित्व करता है। जो मैं खोज रहा हूं वह यह समझने में मदद करता है कि उन फ्लोट्स क्या दर्शाते हैं, और उनके द्वारा प्रस्तुत की जाने वाली ध्वनि को गतिशील रूप से विश्लेषण या संशोधित करने के लिए उनके साथ किस प्रकार की चीजें की जा सकती हैं।

क्या कोई इस तरह की चीज़ों को समझने में मदद के लिए किसी भी साइट/ट्यूटोरियल/संदर्भों की सिफारिश कर सकता है?

+0

PCM ऑडियो: http: //en.wikipedia

यहाँ एक सिंथ ("Soundoid") मैं फ्लैश में सह-बनाया का एक वीडियो है .org/विकी/पल्स-कोड_मोडुलेशन – some

+0

असल में प्रत्येक 32 बिट मान निर्दिष्ट समय पर वोल्टेज स्तर का प्रतिनिधित्व करता है।चूंकि नमूना आवृत्ति 44100 हर्ट्ज है, इसलिए प्रति चैनल प्रति सेकंड 441000 32 बिट मान प्राप्त होते हैं (* 2 क्योंकि आपके पास स्टीरियो है) – some

+0

स्टीरियो लगता है कि बाएं और दाएं चैनल को अक्सर अंतःस्थापित किया जाता है ताकि पहला नमूना बाएं चैनल का प्रतिनिधित्व करता हो और दूसरा दायां , और इसी तरह। – some

उत्तर

95

जैसा कि कुछ ने टिप्पणियों में बताया है, आप जो देखना चाहते हैं वह PCM audio है।

संक्षेप में, sound एक लहर है जो हवा के माध्यम से यात्रा करती है। उस ध्वनि को कैप्चर करने के लिए, हम microphone का उपयोग करते हैं, जिसमें एक झिल्ली होती है जो ध्वनि तरंगों के रूप में कंपन करेगी। इस कंपन का एक विद्युत सिग्नल में अनुवाद किया जाता है, जहां वोल्टेज ऊपर और नीचे जाता है। वोल्टेज में यह परिवर्तन एक analog-to-digital converter (एडीसी) द्वारा एक डिजिटल सिग्नल में बदल दिया जाता है जो एक दूसरे ("sampling rate" - 44 किलोहर्ट्ज़, या प्रति सेकंड 44,100 नमूने) का नमूना करके और वर्तमान स्थिति में संग्रहीत किया जाता है, एक पल्स-कोड मॉड्यूटेड (पीसीएम) ऑडियो डेटा।

speaker विपरीत में काम करता है; पीसीएम सिग्नल को digital-to-analog converter (डीएसी) द्वारा एनालॉग में परिवर्तित किया जाता है, फिर एनालॉग सिग्नल स्पीकर पर जाता है जहां यह एक झिल्ली को हिल देगा जो हवा में कंपन उत्पन्न करता है जिसके परिणामस्वरूप ध्वनि होती है।

जोड़ तोड़ ऑडियो

वहाँ हालांकि आप के रूप में "भाषा-नास्तिक", मैं कुछ सरल तरीके उल्लेख करेंगे इस सवाल में चिह्नित किया है, बाहर वहाँ कई भाषाओं कि आप के साथ ऑडियो हेरफेर कर सकते हैं के लिए कई पुस्तकालय हैं (जैसा कि मुझे पता है!) कि आप अपनी पसंदीदा भाषा में ऑडियो में हेरफेर करने में सक्षम होंगे।

मैं छद्म कोड में कोड नमूने प्रस्तुत करूंगा।

छद्म कोड में प्रत्येक ऑडियो नमूना में -1 से 1 की सीमा में आयाम होगा। यह प्रत्येक नमूना को संग्रहीत करने के लिए उपयोग किए जा रहे डेटा प्रकार पर निर्भर करेगा। (मैं float रों से पहले 32-बिट के साथ निपटा है नहीं, तो यह अलग हो सकता है।)

प्रवर्धन

क्रम ऑडियो, बढ़ाना करने के लिए (इसलिए, ध्वनि की मात्रा में वृद्धि) आप 'स्पीकर की कंपन को बड़ा करना चाहते हैं ताकि ध्वनि तरंग की परिमाण बढ़ाई जा सके।

आदेश है कि वक्ता अधिक ले जाने के लिए, आप प्रत्येक नमूने के मूल्य में वृद्धि करना होगा में:

original_samples = [0, 0.5, 0, -0.5, 0] 

def amplify(samples): 
    foreach s in samples: 
     s = s * 2 

amplified_samples = amplify(original_samples) 

// result: amplified_samples == [0, 1, 0, -1, 0] 

जिसके परिणामस्वरूप नमूने अब 2 द्वारा परिलक्षित कर रहे हैं, और प्लेबैक पर, यह बहुत जोर से ध्वनि चाहिए इससे पहले की तुलना में।

साधना

कोई कंपन देखते हैं, वहाँ कोई आवाज़ है। पर झिल्ली के रूप में,

original_samples = [0, 0.5, 0, -0.5, 0] 

def silence(samples): 
    foreach s in samples: 
     s = 0 

silent_samples = silence(original_samples) 

// result: silent_samples == [0, 0, 0, 0, 0] 

ऊपर वापस बजाना कोई आवाज में परिणाम चाहिए: साधना, या किसी विशिष्ट मूल्य के 0 के लिए प्रत्येक नमूने छोड़ने के द्वारा प्राप्त किया जा सकता है, लेकिन किसी भी नमूने के बीच आयाम में परिवर्तन नहीं है नमूनों में आयाम में परिवर्तन की कमी के कारण स्पीकर बिल्कुल नहीं बढ़ रहा है। (1) प्लेबैक नमूना दर बदल रहा है या (2) के नमूने के लिए खुद को बदल रहा है:

स्पीड ऊपर और नीचे

तेजी बातें ऊपर और नीचे दो तरीकों से प्राप्त किया जा सकता है।

44100 हर्ट्ज से 22050 हर्ट्ज तक प्लेबैक नमूना दर बदलने से प्लेबैक की गति कम हो जाएगी। इससे ध्वनि धीमी और स्वर में कम हो जाएगी। 22 केएचजेड स्रोत से जाकर 44 किलोग्राम पर वापस खेलना, ध्वनि बहुत तेजी से और पक्षियों की तरह ऊंची चोटी होगी।

बदलने के नमूने के लिए खुद को (और एक निरंतर प्लेबैक नमूना दर रखने के लिए) का मतलब है। कि नमूने या तो (क) बाहर फेंक दिया हो या (ख) में जुड़ जाते हैं

ऑडियो के प्लेबैक में तेजी लाने के लिए, नमूने बाहर फेंक:

original_samples = [0, 0.1, 0.2, 0.3, 0.4, 0.5] 

def faster(samples): 
    new_samples = [] 
    for i = 0 to samples.length: 
     if i is even: 
      new_samples.add(samples[i]) 
    return new_samples 

faster_samples = faster(original_samples) 

// result: silent_samples == [0, 0.2, 0.4] 

उपरोक्त कार्यक्रम का परिणाम है कि ऑडियो 2 का एक पहलू, एक ऑडियो कि 44 KHz पर 22 KHz पर नमूना प्ले बैक करने के लिए इसी तरह से तेज़ हो जाएगी है।

ऑडियो के प्लेबैक धीमा करने के लिए, कुछ नमूनों में फेंक:

original_samples = [0, 0.1, 0.2, 0.3] 

def slower(samples): 
    new_samples = [] 
    for i = 0 to samples.length: 
     new_samples.add(samples[i]) 
     new_samples.add(interpolate(s[i], s[i + 1])) 
    return new_samples 

slower_samples = slower(original_samples) 

// result: silent_samples == [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3] 

यहाँ, अतिरिक्त नमूने जोड़ा गया था, जिससे प्लेबैक धीमा। यहां, हमारे पास interpolation फ़ंक्शन है जो "अनुमान" बनाता है कि उस अतिरिक्त स्थान को भरने के तरीके के बारे में बताएं।

स्पेक्ट्रम विश्लेषण और FFT

एक तकनीक Fast Fourier transform (FFT) कहा जाता है का उपयोग करना द्वारा संशोधन लगता है, आयाम समय डोमेन ध्वनि डेटा आवृत्ति घटक पता लगाने के लिए आवृत्ति समय डोमेन के लिए मैप किया जा सकता ऑडियो का इसका उपयोग spectrum analyzers बनाने के लिए किया जा सकता है जिसे आप अपने पसंदीदा ऑडियो प्लेयर पर देख सकते हैं।

इतना ही नहीं, के बाद से अब आप ऑडियो की आवृत्ति घटकों, यदि आप

की मात्रा को बदल आप कट करने के लिए कुछ आवृत्तियों, आप FFT में ध्वनि डेटा को बदलने के लिए उपयोग कर सकते हैं चाहते हैं आवृत्ति-समय डोमेन, और आवृत्ति घटकों को शून्य-आउट करें जो वांछित नहीं हैं।इसे filtering कहा जाता है।

एक high-pass filter है, जो एक निश्चित आवृत्ति ऊपर आवृत्तियों इस तरह किया जा सकता है की अनुमति देता है बनाना:

data = fft(orignal_samples) 

for i = (data.length/2) to data.length: 
    data[i] = 0 

new_samples = inverse_fft(data) 

उपरोक्त उदाहरण में, आधे रास्ते चिह्न पर सभी आवृत्तियों कटऑफ है। इसलिए, यदि ऑडियो अधिकतम आवृत्ति के रूप में 22 किलोहर्ट्ज़ का उत्पादन कर सकता है, तो 11 किलोहर्ट्ज़ से ऊपर की आवृत्ति काटा जाएगा। (ऑडियो के लिए 44 किलोग्राम पर खेला गया, अधिकतम सैद्धांतिक आवृत्ति जिसे 22 उत्पादित किया जा सकता है। Nyquist–Shannon sampling theorem देखें।)

यदि आप निम्न आवृत्ति रेंज (बास बूस्ट प्रभाव के समान) को बढ़ाने की तरह कुछ करना चाहते हैं, कम आवृत्तियों के लिए अग्रणी बनने के लिए जोर से

data = fft(orignal_samples) 

for i = 0 to (data.length/4): 
    increase(data[i]) 

new_samples = inverse_fft(data) 

यह उदाहरण ऑडियो की आवृत्ति घटकों के निचले तिमाही बढ़ जाती है,:, FFT-बदल डेटा के निचले अंत लेने के लिए और उसके परिमाण में वृद्धि।


ऑडियो में हेरफेर करने के लिए नमूने के लिए कुछ चीजें की जा सकती हैं। बस आगे बढ़ें और प्रयोग करें! यह सीखने का सबसे रोमांचक तरीका है।

शुभकामनाएं!

+3

वाह ... अगर केवल मैं जवाब पसंदीदा कर सकता हूं;) – TraumaPony

+0

Ctrl + D (यदि गलत नहीं है तो SO में प्रश्न अद्वितीय URL हैं ...) –

+0

वाह, बहुत अच्छा जवाब! बीटीडब्ल्यू, आपका छद्म कोड पाइथन की तरह दिखता है;) –

4

ऐसा लगता है कि आप को पता है PCM audio

अधिक के बारे में मूल रूप से हर 32 बिट मूल्य एक निर्दिष्ट समय पर वोल्टेज स्तर का प्रतिनिधित्व करना चाहते हैं। चूंकि नमूना आवृत्ति 44100 हर्ट्ज है, इसलिए आपको प्रति चैनल प्रति सेकंड 441000 32 बिट मान प्राप्त होते हैं (* 2 क्योंकि आपके पास स्टीरियो है)

स्टीरियो लगता है बाएं और दाएं चैनल को अक्सर अंतःस्थापित किया जाता है ताकि पहला नमूना बाएं चैनल का प्रतिनिधित्व करता हो और दूसरी दाईं ओर, और इसी तरह।

3

यह समझने के लिए कि 32 बिट फ्लोट के उन एरे आपको डिजिटल ऑडियो के लिए एक अच्छा परिचय पढ़ने की आवश्यकता है।

यदि आप कर्टिस रोड्स द्वारा लाइब्रेरी 'द कंप्यूटर म्यूजिक ट्यूटोरियल' के पास हैं तो उपयोगी हो सकता है। विशेष रूप से एक 'डिजिटल ऑडियो अवधारणाओं' अध्याय। (हालांकि यह एक लंबा समय रहा है क्योंकि मैंने इस पुस्तक को पढ़ा है)।

एक बार जब आप डिजिटल ऑडियो की समझ लेते हैं, तो इसे कुशल बनाने के कई तरीके हैं। जब आप तैयार हों तो ये लिंक मदद कर सकते हैं।

Dsp + Plugin Development forum at KVR Audio प्रश्न पूछने के लिए एक जगह है। यहां पोस्ट आम तौर पर सामान्य ऑडियो डीएसपी और वीएसटी प्लगइन विषयों के बीच विभाजित होते हैं।

MusicDsp में बहुत सारे कोड स्निपेट हैं।

The Scientist and Engineer's Guide to Digital Signal Processing एक मुफ्त ऑनलाइन टेक्स्ट बुक है जो मानक डीएसपी विषयों पर गहराई में जाती है। जिनमें से अधिकांश डिजिटल ऑडियो पर भी लागू होता है।

1

मैंने हाल ही में एक ही प्रश्न पोस्ट किया: good audio dsp tutorials

सुनहरा लिंक निश्चित रूप से The Audio EQ Cookbook है, यदि आप ईक्यू को समझना और क्रमबद्ध करना चाहते हैं, लेकिन अधिक आम तौर पर, musicdsp.org archive ऑडियो डीएसपी कोडिंग के लिए मैंने पाया है सबसे अच्छा संसाधन है। http://www.youtube.com/watch?v=O-1hHiA7y4o

और तुम यहाँ इसके साथ खेल सकते हैं:: http://www.zachernuk.com/2011/03/28/soundoid-audio-synthesizer-v0-5/

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