2009-04-09 15 views
35

मुझे इस बारे में सोचना पसंद है कि सबकुछ कैसे हो सकता है और संख्याओं द्वारा इसका प्रतिनिधित्व किया जाता है। उदाहरण के लिए, सादे टेक्स्ट को ASCII जैसे कोड द्वारा दर्शाया जाता है, और छवियों को आरजीबी मूल्यों द्वारा दर्शाया जाता है। टेक्स्ट और छवियों का प्रतिनिधित्व करने के ये सबसे आसान तरीके हैं।ऑडियो संख्याओं के साथ कैसे प्रदर्शित किया जाता है?

ऑडियो के साथ संख्याओं का प्रतिनिधित्व करने का सबसे आसान तरीका क्या है? मैं सीखना चाहता हूं कि ऑडियो के साथ काम करने वाले कार्यक्रमों को कैसे लिखना है और सोचा कि यह शुरू करने का एक अच्छा तरीका होगा। हालांकि, मुझे इंटरनेट पर कोई अच्छी स्पष्टीकरण नहीं मिल रही है।

उत्तर

73

शारीरिक रूप से, जैसा कि आप शायद जानते हैं, ऑडियो एक कंपन है। आम तौर पर, हम लगभग 20 हर्ट्ज और 20,000 हर्ट्ज के बीच हवा के कंपन के बारे में बात कर रहे हैं। इसका मतलब है कि हवा प्रति प्रति 20 से 20,000 बार आगे बढ़ रही है।

आपको लगता है कि कंपन को मापने और यह एक विद्युत संकेत में बदलने (जैसे कि, एक माइक्रोफोन का उपयोग कर) हैं, तो आप वोल्टेज ध्वनि के रूप में एक ही तरंग में अलग-अलग एक विद्युत संकेत मिल जाएगा। हमारे शुद्ध-स्वर परिकल्पनात्मक में, वह तरंग साइन कार्य के मिलान से मेल खाएगा।

अब, हमारे पास एनालॉग सिग्नल, वोल्टेज है। अभी भी डिजिटल नहीं है। लेकिन, हम जानते हैं कि यह वोल्टेज (उदाहरण के लिए) -1V और + 1V के बीच बदलता है। हम पाठ्यक्रम के कर सकते हैं, तारों के लिए एक वोल्ट मीटर संलग्न करें और वोल्टेज पढ़ें।

मनमाने ढंग से, हम अपने वोल्ट मीटर पर पैमाने को बदल देंगे। हम 32767 द्वारा वोल्ट्स वोल्ट करेंगे। अब यह -1V -32767 और + 1V पर कॉल करेगा। ओह, और यह निकटतम पूर्णांक तक चलेगा।

अब, हम एक कंप्यूटर के लिए हमारी वोल्ट मीटर हुक, और कंप्यूटर को निर्देश देने मीटर प्रति सेकंड 44,100 बार पढ़ा। एक दूसरा वोल्ट मीटर जोड़ें ( अन्य स्टीरियो चैनल के लिए), और अब हमारे पास डेटा है जो ऑडियो सीडी पर जाता है।

इस प्रारूप को स्टीरियो 44,100 हर्ट्ज, 16-बिट रैखिक पीसीएम कहा जाता है। और यह वास्तव में वोल्टेज माप का एक गुच्छा है।

+0

बहुत अच्छा स्पष्टीकरण, धन्यवाद! –

+1

तकनीकी रूप से यह आयाम माप का एक गुच्छा है। ऐसा लगता है कि अधिकांश एडीसी आयाम का प्रतिनिधित्व करने के लिए वोल्टेज का उपयोग करते हैं। –

+1

@SteveKuo तकनीकी रूप से बोलते हुए, यह सही है, लेकिन ऐसा लगता है कि किसी भी सार्थक तरीके से इस मुद्दे को बहुत जटिल बना दिया जाएगा। और चूंकि यह एक विद्युत इंजीनियरिंग साइट नहीं है ... – derobert

3

मुझे लगता है कि एक विशिष्ट नमूना आवृत्ति पर तरंग के नमूने सबसे बुनियादी प्रतिनिधित्व होंगे।

+0

http://en.wikipedia.org/wiki/Audio_file_format यह इंगित करता है कि यह – Jimmy

+0

सही है - इसके लिए तकनीकी शब्द "रैखिक नाड़ी-कोड मॉडुलन" है। –

2

क्या आपने कभी एक तरंग के नज़दीक को देखा है? वाई-अक्ष को केवल एक पूर्णांक के रूप में दर्शाया जाता है, आमतौर पर 16 बिट्स में।

8

ऑडियो डिजिटल नमूने द्वारा प्रदर्शित किया जा सकता है। अनिवार्य रूप से, एक नमूना (जिसे डिजिटल कनवर्टर के लिए एनालॉग भी कहा जाता है) प्रत्येक 1/एफएस के ऑडियो सिग्नल का मान लेता है, जहां fs नमूना आवृत्ति है। एडीसी, फिर सिग्नल को मापता है, जो एक गोलाकार ऑपरेशन है। तो यदि आपका संकेत 0 से 3 वोल्ट (पूर्ण स्केल रेंज) से है तो नमूना गोल किया जाएगा, उदाहरण के लिए 16-बिट संख्या। इस उदाहरण में, 16-बिट संख्या प्रत्येक 1/fs/

एक बार दर्ज की जाती है, उदाहरण के लिए, अधिकांश डब्ल्यूएवी/एमपी 3 को 44 केएचजेज़ पर एक ऑडियो सिग्नल नमूना दिया जाता है। मुझे नहीं पता कि आप कितनी विस्तार चाहते हैं, लेकिन "Nyquist नमूना दर" नामक इस बात को कहता है कि नमूना आवृत्ति वांछित आवृत्ति कम से कम दो बार होनी चाहिए। तो आपकी डब्ल्यूएवी/एमपी 3 फ़ाइल पर आप सबसे अच्छा टीपी 22 केएचजेड आवृत्तियों को सुनने में सक्षम होने जा रहे हैं।

इस क्षेत्र में आप बहुत सारी जानकारी दे सकते हैं। सबसे सरल रूप निश्चित रूप से डब्ल्यूएवी प्रारूप होगा। यह असंपीड़ित ऑडियो है। एमपी 3 और ओग जैसे प्रारूपों को आप उनके साथ काम करने से पहले डिकंप्रेस करना होगा।

2

एनालॉग-डिजिटल रूपांतरण जैसी चीजें देखें। आपको इस तरह से प्रारंभ करवाया जाना चाहिए। ये डिवाइस डिजिटल सिग्नल में ऑडियो सिग्नल (साइन तरंगों) को परिवर्तित कर सकते हैं। तो, 16-बिट एडीसी -32768 से 32768 के बीच से साइन का प्रतिनिधित्व करने में सक्षम होगा। यह निश्चित बिंदु में है। फ्लोटिंग-पॉइंट में ऐसा करना भी संभव है (हालांकि प्रदर्शन कारणों के लिए अनुशंसित नहीं है लेकिन सीमा कारणों के लिए इसकी आवश्यकता हो सकती है)। विपरीत (डिजिटल-एनालॉग रूपांतरण) तब होता है जब हम संख्याओं को साइन लहरों में परिवर्तित करते हैं। यह एक डीएसी नामक कुछ द्वारा संभाला जाता है।

2

मुझे लगता है कि ऑडियो के साथ खेलना शुरू करने का एक अच्छा तरीका Processing और Minim के साथ होगा। यह प्रोग्राम आपके माइक्रोफ़ोन से ध्वनि की आवृत्ति स्पेक्ट्रम आकर्षित करेगा!

import ddf.minim.*; 
import ddf.minim.analysis.*; 

AudioInput in; 
FFT fft; 

void setup() 
{ 
    size(1024, 600); 
    noSmooth(); 
    Minim.start(this); 
    in = Minim.getLineIn(); 
    fft = new FFT(in.bufferSize(), in.sampleRate()); 
} 

void draw() 
{ 
    background(0); 
    fft.forward(in.mix); 
    stroke(255); 
    for(int i = 0; i < fft.specSize(); i++) 
    line(i*2+1, height, i*2+1, height - fft.getBand(i)*10); 
} 

void stop() 
{ 
    in.close(); 
    Minim.stop(); 
    super.stop(); 
} 
4

संख्या के रूप में ध्वनि का प्रतिनिधित्व करने का सबसे सरल तरीका पीसीएम (पल्स कोड मॉड्युलेशन) है। इसका मतलब है कि ध्वनि के आयाम को एक निश्चित आवृत्ति पर दर्ज किया जाता है (प्रत्येक आयाम मान को नमूना कहा जाता है)। उदाहरण के लिए सीडी गुणवत्ता ध्वनि आवृत्ति 44100 हर्ट्ज पर 16 बिट नमूने (स्टीरियो में) है।

एक नमूना एक पूर्णांक संख्या (आमतौर पर 8, 12, 16, 24 या 32 बिट) या एक चल बिन्दु संख्या (16 बिट नाव या 32 बिट डबल) के रूप में प्रतिनिधित्व किया जा सकता है। नंबर या तो या हस्ताक्षरित किया जा सकता है अहस्ताक्षरित।

16 बिट पर हस्ताक्षर किए नमूनों के लिए मान 0 बीच में होगा, और -32,768 और 32767 अधिकतम amplitues होगा। 16 बिट अहस्ताक्षरित नमूने लिए मूल्य 32768 बीच में हो सकता है, और 0 और 65535 अधिकतम आयाम होगा।

चल बिन्दु नमूने सामान्य प्रारूप के लिए कि 0 बीच में है, और -1.0 और 1.0 अधिकतम आयाम हैं।

पीसीएम डेटा को संपीड़ित किया जा सकता है, उदाहरण के लिए एमपी 3 का उपयोग करना।

+0

यह ध्यान देने योग्य हो सकता है कि पूर्णांक के रूप में ध्वनि का प्रतिनिधित्व करते समय, न्यूनतम और अधिकतम मान पूर्ण होते हैं; यदि ध्वनि कई चरणों के माध्यम से संसाधित की जाती है और कोई भी चरण उस आयाम से अधिक हो जाएगा, तो क्लिपिंग परिणामस्वरूप [आमतौर पर बहुत कठोर ध्वनि] होगा। एकाधिक प्रसंस्करण चरणों के माध्यम से फ़्लोटिंग-पॉइंट ऑडियो पास करते समय, क्लिपिंग की संभावना परिणामस्वरूप होगी यदि अंतिम ऑडियो में +/- 1.0 रेंज के बाहर मान हैं, लेकिन इंटरमीडिएट चरण क्लिपिंग के बिना उस सीमा के बाहर जा सकते हैं। – supercat

2

मिनिमल सी ऑडियो पीढ़ी उदाहरण

नीचे दिए गए उदाहरण कच्चे प्रारूप में एक शुद्ध 1000k हर्ट्ज साइनस उत्पन्न करता है। साथ

#include <math.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <stdint.h> 

int main(void) { 
    FILE *f; 
    const double PI2 = 2 * acos(-1.0); 
    const double SAMPLE_FREQ = 44100; 
    const unsigned int NSAMPLES = 4 * SAMPLE_FREQ; 
    uint16_t ampl; 
    uint8_t bytes[2]; 
    unsigned int t; 

    f = fopen("out.raw", "wb"); 
    for (t = 0; t < NSAMPLES; ++t) { 
     ampl = UINT16_MAX * 0.5 * (1.0 + sin(PI2 * t * 1000.0/SAMPLE_FREQ)); 
     bytes[0] = ampl >> 8; 
     bytes[1] = ampl & 8; 
     fwrite(bytes, 2, sizeof(uint8_t), f); 
    } 
    fclose(f); 
    return EXIT_SUCCESS; 
} 

खेल::

sudo apt-get install ffmpeg 
ffplay -autoexit -f u16be -ar 44100 -ac 1 out.raw 

पैरामीटर पर विस्तार से बताया: https://superuser.com/a/1063230/128124

उबंटू 15.10 पर परीक्षण किया गया 44.1kHz नमूना दर पर, यह 4 सेकंड तक चलेगा। एक सरल कैनन synth सहित fun examples on GitHub

भौतिकी

ऑडियो समय में हर पल के लिए एक एकल संख्या के रूप में एन्कोड किया गया है। उस वीडियो की तुलना करें, जिसमें समय में प्रति मिनट WIDTH * HEIGHT संख्या की आवश्यकता होती है।

इसके बाद यह संख्या अपने स्पीकर की diaphragm के रैखिक विस्थापन में बदल जाती है:

| /
|/
|-/ 
| | A I R 
|-\ 
| \ 
| \ 
<-> displacement 

| /
| /
|---/ 
| | A I R 
|---\ 
| \ 
|  \ 
<---> displacement 

|  /
| /
|-----/ 
|  | A I R 
|-----\ 
|  \ 
|  \ 
<-----> displacement 

विस्थापन पीछे और आगे हवा धक्का, दबाव मतभेद है, जो P-waves के रूप में हवा के माध्यम से यात्रा का निर्माण।

केवल विस्थापन के मामले: एक स्थिर संकेत, भले ही अधिकतम, कोई आवाज उत्पन्न न हो: डायाफ्राम बस एक निश्चित स्थिति पर रहता है।

sampling frequency निर्धारित करता है कि विस्थापन कितनी तेजी से किया जाना चाहिए।

44,1kHz एक सामान्य नमूना आवृत्ति है क्योंकि मनुष्य 20kHz तक और Nyquist–Shannon sampling theorem की वजह से सुन सकते हैं।

नमूना आवृत्ति वीडियो के लिए एफपीएस के समान है, हालांकि 25 (सिनेमा) - 144 (कट्टर गेमिंग मॉनीटर) रेंज की तुलना में इसका बहुत अधिक मूल्य है जो हम आम तौर पर वीडियो के लिए देखते हैं।

प्रारूप

.raw एक underspecified प्रारूप है कि बस आयाम बाइट का है, और कोई मेटाडाटा है।

हमें नमूना आवृत्ति जैसे कमांड लाइन पर कुछ मेटा-डेटा पैरामीटर पास करना होगा क्योंकि प्रारूप में वह डेटा नहीं है।

अन्य असम्पीडित प्रारूप भी हैं जिनमें सभी आवश्यक मेटाडेटा शामिल हैं, उदा। .wav, देखें: WAV File Synthesis From Scratch - C

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

जीवविज्ञान

मनुष्य अपनी आवृत्ति अपघटन (उर्फ Fourier transform) द्वारा ज्यादातर ध्वनि अनुभव।

मुझे लगता है कि ऐसा इसलिए है क्योंकि आंतरिक कान में ऐसे हिस्सों होते हैं जो विभिन्न आवृत्तियों (TODO पुष्टि) के लिए गूंजते हैं।

इसलिए, संगीत को संश्लेषित करते समय, हम समय के बजाय आवृत्तियों को जोड़ने के मामले में अधिक सोचते हैं। यह in this example सचित्र है।

यह प्रत्येक बिंदु के लिए 20 हर्ट्ज और 20kHz के बीच 1 डी वेक्टर के मामले में सोचने की ओर जाता है।

गणितीय फूरियर ट्रांसफॉर्म समय की धारणा खो देता है, इसलिए संश्लेषण करते समय हम क्या करते हैं, अंक के समूह लेना और उस समूह के लिए आवृत्तियों को जोड़ना, और फूरियर को वहां बदलना है।

सौभाग्य से, फूरियर ट्रांसफॉर्म रैखिक है, इसलिए हम सीधे विस्थापन को जोड़ सकते हैं और सामान्यीकृत कर सकते हैं।

अंक के प्रत्येक समूह का आकार एक समय - आवृत्ति सटीक ट्रेडऑफ होता है, उसी गणित द्वारा मध्यस्थता Heisenberg's uncertainty principle के रूप में होता है।

Wavelets इस मध्यवर्ती समय - आवृत्ति विवरण का एक और सटीक गणितीय विवरण हो सकता है।

1

वास्तविक अनुरूप ऑडियो को डिजिटल रूप में परिवर्तित करने में 2 कदम शामिल हैं।

  1. सैम्पलिंग
  2. परिमाणीकरण

सैम्पलिंग

दर, जिस पर एक सतत तरंग (इस मामले में, ऑडियो) नमूना, नमूना दर कहा जाता है। मनुष्यों द्वारा माना जाने वाला आवृत्ति सीमा 20-20,000 हर्ट्ज है। हालांकि, सीडी निक्विस्ट नमूना प्रमेय का उपयोग करती हैं, जिसका मतलब है 44,100 हर्ट्ज की नमूना दर, 0 - 22,050 हर्ट्ज की आवृत्ति को कवर करता है।

परिमाणीकरण

'का नमूना लेना' चरण अब जरूरत से प्राप्त मूल्यों के असतत सेट मूल्यों की एक सीमित संख्या में परिवर्तित किया। एक 8-बिट क्वांटिज़ेशन 256 संभावित मान प्रदान करता है, जबकि 16 बिट क्वांटिज़ेशन 65,536 मान प्रदान करता है।

0

उत्तर सभी नमूना आवृत्ति से संबंधित हैं, लेकिन सवाल को संबोधित नहीं करते हैं। एक ध्वनि का एक विशेष स्नैपशॉट, मैं कल्पना करता हूं, कई अलग-अलग आवृत्तियों के लिए अलग-अलग आयामों को शामिल करता हूं (कहें कि आप एक ए और सी दोनों को कीबोर्ड पर एक साथ दबाते हैं, ए के साथ जोर से)। यह 16 बिट संख्या में कैसे दर्ज किया जाता है? यदि आप जो कर रहे हैं वह आयाम को माप रहा है (ध्वनि कितनी जोरदार है), आप अलग-अलग नोट्स कैसे प्राप्त करते हैं?

आह! मुझे लगता है कि मैं इसे इस टिप्पणी से प्राप्त करता हूं: "यह संख्या तब आपके स्पीकर के डायाफ्राम के रैखिक विस्थापन में परिवर्तित हो जाती है।" नोट्स प्रकट होते हैं कि डायाफ्राम कितनी तेजी से हिल रहा है। यही कारण है कि आपको प्रति सेकंड 44,000 विभिन्न मूल्यों की आवश्यकता है। एक नोट 1000 हर्ट्ज के आदेश पर कहीं है, इसलिए एक शुद्ध नोट डायाफ्राम प्रति सेकेंड 1000 गुना आगे बढ़ता है। पूरे ऑर्केस्ट्रेट की एक रिकॉर्डिंग में पूरे स्थान पर कई अलग-अलग नोट हैं, और चमत्कारिक रूप से डायाफ्राम गति के एक ही समय में परिवर्तित किया जा सकता है। प्रति सेकंड 44,000 बार डायाफ्राम को थोड़ी देर में या बाहर जाने का निर्देश दिया जाता है, और संख्याओं की यह सरल (लंबी) सूची बीथोन्स को बेथोन का प्रतिनिधित्व कर सकती है!

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

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