जैसा कि कुछ ने टिप्पणियों में बताया है, आप जो देखना चाहते हैं वह 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-बदल डेटा के निचले अंत लेने के लिए और उसके परिमाण में वृद्धि।
ऑडियो में हेरफेर करने के लिए नमूने के लिए कुछ चीजें की जा सकती हैं। बस आगे बढ़ें और प्रयोग करें! यह सीखने का सबसे रोमांचक तरीका है।
शुभकामनाएं!
PCM ऑडियो: http: //en.wikipedia
यहाँ एक सिंथ ("Soundoid") मैं फ्लैश में सह-बनाया का एक वीडियो है .org/विकी/पल्स-कोड_मोडुलेशन – some
असल में प्रत्येक 32 बिट मान निर्दिष्ट समय पर वोल्टेज स्तर का प्रतिनिधित्व करता है।चूंकि नमूना आवृत्ति 44100 हर्ट्ज है, इसलिए प्रति चैनल प्रति सेकंड 441000 32 बिट मान प्राप्त होते हैं (* 2 क्योंकि आपके पास स्टीरियो है) – some
स्टीरियो लगता है कि बाएं और दाएं चैनल को अक्सर अंतःस्थापित किया जाता है ताकि पहला नमूना बाएं चैनल का प्रतिनिधित्व करता हो और दूसरा दायां , और इसी तरह। – some