Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Audio Fundamentals - Basics
Search
Chinmay Pendharkar
May 10, 2013
Technology
0
130
Audio Fundamentals - Basics
Slides for a workshop on audio fundamentals.
Chinmay Pendharkar
May 10, 2013
Tweet
Share
More Decks by Chinmay Pendharkar
See All by Chinmay Pendharkar
Audio Fundamentals - Pd
notthetup
0
98
DNSSEC and Bind
notthetup
1
170
Garageband And Podcasting
notthetup
0
67
Audio Fundamentals - HTML5 Audio
notthetup
0
120
Audio Fundamentals - Oscillators
notthetup
0
63
Robots and Pi
notthetup
2
120
Auralization of road vehicles using spectral modeling synthesis
notthetup
0
210
What I’ve learnt about Environmental Sound Design
notthetup
0
240
Audio Editing with Audacity
notthetup
0
70
Other Decks in Technology
See All in Technology
CDK対応したAWS DevOps Agentを試そう_20260201
masakiokuda
1
270
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
640
Oracle Cloud Observability and Management Platform - OCI 運用監視サービス概要 -
oracle4engineer
PRO
2
14k
MCPでつなぐElasticsearchとLLM - 深夜の障害対応を楽にしたい / Bridging Elasticsearch and LLMs with MCP
sashimimochi
0
170
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
1.3k
生成AI時代にこそ求められるSRE / SRE for Gen AI era
ymotongpoo
5
3.2k
Greatest Disaster Hits in Web Performance
guaca
0
230
セキュリティについて学ぶ会 / 2026 01 25 Takamatsu WordPress Meetup
rocketmartue
1
300
AI駆動開発を事業のコアに置く
tasukuonizawa
1
180
What happened to RubyGems and what can we learn?
mikemcquaid
0
290
AIエージェントを開発しよう!-AgentCore活用の勘所-
yukiogawa
0
160
Ruby版 JSXのRuxが気になる
sansantech
PRO
0
150
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
340
We Are The Robots
honzajavorek
0
160
The Limits of Empathy - UXLibs8
cassininazir
1
210
Docker and Python
trallard
47
3.7k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
580
The World Runs on Bad Software
bkeepers
PRO
72
12k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
0
110
Building Applications with DynamoDB
mza
96
6.9k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
64
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
117
110k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.3k
Transcript
Audio Fundamentals Chinmay Pendharkar, Sonoport, 2013
None
Sound Waves
Analog vs Digital Audio
Analog vs Digital Audio
Digitization
Digitization - Why? • Easier to manipulate digital audio •
Easier to store digital audio • Easier to transport digital audio • Get back perfect original analog audio
Digital Audio Analog Audio Analog - Digital Conversion Digital -
Analog Conversion Digital Audio
Sampling Frequency
Sampling Frequency
Sampling Theorem
Sampling Theorem
Sampling Theorem 2 x (Max Frequency of Content) ≤ Sampling
Frequency for perfect reconstruction of analog signal from digital
Sampling Frequency 2 x (Max Frequency of Content) ≤ Sampling
Frequency. 2 x ( 20000 Hz ) ≤ 44100 Hz . Upper Limit of Human Hearing
Sampling • Sampling Frequency > 44100 : Oversampling • Sampling
Frequency < 44100 : Undersampling • 44100Hz => ◦ 44100 samples per second ◦ 44100 data points per second • Less computation vs Audio Fidelity
Quantization / Bit Depth uint_16
Quantization 0x0000 (0) 0xFFFF (65535) 96dBFS ~ 120dB Human Hearing
Range 65535 65534 65533 65532 0
Digital Audio Discretization of Time - Sampling Discretization of Amplitude
- Quantization
Digital Audio Common Formats: Sampling Rate : 44100 Hz Bit
Depth : 16 bits Sampling Rate : 192000 Hz Bit Depth : 24 bits "CD Audio" "Mastering Quality"
Digital Audio Formats • Uncompressed ◦ AIFF ◦ WAV •
Compressed (Lossless) ◦ FLAC ◦ ALAC • Compressed (Lossy) ◦ MP3 ◦ AAC
Real Time Audio on PC/Mac
Audio Stacks Audio Hardware Drivers Operating System Audio API User
Program/Application
Audio Stack - Windows
Audio Stack - OSX/iOS
Audio Stack - Linux
Audio Stack - Android
Audio Stacks Audio Hardware Drivers Operating System Audio API User
Program/Application
Audio Stack Audio Hardware DAC Digital Analog Converter
Audio Stacks 44.1kHz / 16bits ~= 172 kB per second
DAC Digital Data Buffer "Magic" OS
DAC Schemes DAC Digital Data Buffer #1 OS Digital Data
Buffer #2 "Magic" 1s
Buffer Size - Latency • Time taken = Max time
to fill next buffer • Time taken = Min time to new sound output Stereo = 2 channels
Buffer Size - Latency Ideally we want.... • Fill up
next buffer well before current is fully output. (No clicks/silence) • Have no delay between audio being sent to the OS and output. (No buffering)
Buffer Size - Latency Typical Buffer Sizes • 256 *
2 * 2 = 1024 bytes = 5.8ms latency • 512 *2 * 2 = 2048 byes = 11.6ms latency • 1024 * 2 * 2 = 4096 byes = 23.2ms latency Assuming 2 channel stereo and 16bit depth
Callback vs R/W IO Two common schemes for audio drivers.
• Read-Write • Callback
Read-Write • Direct R/W access to "digital data buffer". •
Blocking • PaError Pa_WriteStream ( PaStream * stream, void * buffer, long frames ) • PaError Pa_ReadStream ( PaStream * stream, void * buffer, long frames )
Callback • Callback when more data is needed. • Non-Blocking
• PaError Pa_OpenStream (PaStream ** stream, ... , double sampleRate, long framesPerBuffer, ... ,PaStreamCallback * streamCallback, void * userData) • typedef int PaStreamCallback(const void *input, void *output, unsigned long frameCount, ... , void *userData)
Read-Write Example - C // From http://portaudio.com/docs/v19-doxydocs/blocking_read_write.html err = Pa_Initialize();
if( err != paNoError ) goto error; /* --SKIPPED-- -- Initalize Variables -- --SKIPPED-- */ /* -- setup stream -- */ err = Pa_OpenStream( &stream, &inputParameters,&outputParameters, SAMPLE_RATE,FRAMES_PER_BUFFER, paClipOff, NULL, /* no callback, use blocking API */ NULL ); /* no callback, so no callback userData */ /* -- start stream -- */ err = Pa_StartStream( stream ); printf("Wire on. Will run one minute.\n"); fflush(stdout);
Read-Write Example - C /* -- Here's the loop where
we pass data from input to output -- */ for( i=0; i<(60*SAMPLE_RATE)/FRAMES_PER_BUFFER; ++i ) { err = Pa_WriteStream( stream, sampleBlock, FRAMES_PER_BUFFER ); err = Pa_ReadStream( stream, sampleBlock, FRAMES_PER_BUFFER ); } /* -- Now we stop the stream -- */ err = Pa_StopStream( stream ); /* -- don't forget to cleanup! -- */ err = Pa_CloseStream( stream ); Pa_Terminate(); return 0; }
Callback Example - C // http://portaudio.com/docs/v19-doxydocs/paex__sine_8c_source.html err = Pa_Initialize(); if(
err != paNoError ) goto error; err = Pa_OpenStream( &stream,NULL,&outputParameters, SAMPLE_RATE, FRAMES_PER_BUFFER, paClipOff, patestCallback, &data ); if( err != paNoError ) goto error; printf("Setup Done\n"); err = Pa_SetStreamFinishedCallback( stream, &StreamFinished ); err = Pa_StartStream( stream ); printf("Play for %d seconds.\n", NUM_SECONDS ); Pa_Sleep( NUM_SECONDS * 1000 ); err = Pa_StopStream( stream ); err = Pa_CloseStream( stream ); Pa_Terminate(); return err;
Callback Example - C static int patestCallback( const void *inputBuffer,
void *outputBuffer, unsigned long framesPerBuffer, const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, void *userData ) { for( i=0; i<framesPerBuffer; i++ ){ *out++ = data->sine[data->left_phase]; /* left */ *out++ = data->sine[data->right_phase]; /* right */ data->left_phase += 1; if( data->left_phase >= TABLE_SIZE ) data->left_phase -= TABLE_SIZE; data->right_phase += 3; if( data->right_phase >= TABLE_SIZE ) data->right_phase -= TABLE_SIZE; } return paContinue; }
Callback Example - AS3 var mySound:Sound = new Sound(); function
sineWaveGenerator(event:SampleDataEvent):void { for ( var c:int=0; c<8192; c++ ) { event.data.writeFloat(Math.sin((Number(c+event. position)/Math.PI/2))*0.25); event.data.writeFloat(Math.sin((Number(c+event. position)/Math.PI/2))*0.25); } } mySound.addEventListener(SampleDataEvent.SAMPLE_DATA, sineWaveGenerator); mySound.play();
Hands On