2009-04-09 14 views
35

Ich denke gerne darüber nach, wie alles sein kann und durch Zahlen repräsentiert wird. Zum Beispiel wird Klartext durch einen Code wie ASCII dargestellt, und Bilder werden durch RGB-Werte dargestellt. Dies sind die einfachsten Möglichkeiten, um Text und Bilder darzustellen.Wie wird Audio mit Zahlen dargestellt?

Wie kann Audio am einfachsten mit Zahlen dargestellt werden? Ich möchte lernen, wie man Programme schreibt, die mit Audio arbeiten und dachte, das wäre ein guter Anfang. Ich kann jedoch keine guten Erklärungen im Internet finden.

Antwort

73

Physikalisch, wie Sie wahrscheinlich wissen, ist Audio eine Vibration. In der Regel sprechen wir von Luftschwingungen zwischen etwa 20 Hz und 20.000 Hz. Das bedeutet, dass sich die Luft 20 bis 20 000 mal pro Sekunde hin- und herbewegt. Sekunde.

Wenn Sie diese Vibration messen und sie in ein elektrisches Signal umwandeln (z. B. mit einem Mikrofon), erhalten Sie ein elektrisches Signal mit der Spannung, die in der gleichen Wellenform wie der Ton variiert. In unserem Reinton hypothetisch wird diese Wellenform mit der der Sinusfunktion übereinstimmen.

Jetzt haben wir ein analoges Signal, die Spannung. Immer noch nicht digital. Aber, wir wissen, dass diese Spannung variiert zwischen (zum Beispiel) -1V und + 1V. Wir können natürlich von einen Voltmeter an die Drähte anschließen und die Spannung ablesen.

Beliebig ändern wir die Skala auf unserem Voltmeter. Wir werden mehrere die Volt von 32767. Es ruft jetzt -1V -32767 und + 1V . Oh, und es wird auf die nächste Ganzzahl runden.

Jetzt haken wir unser Voltmeter an einen Computer an und weisen den Computer an das Messgerät 44.100 Mal pro Sekunde zu lesen. Fügen Sie einen zweiten Voltmeter hinzu (für den anderen Stereokanal), und wir haben jetzt die Daten, die auf eine Audio CD gehen.

Dieses Format wird Stereo 44,100 Hz, 16-Bit linear PCM genannt. Und es ist wirklich nur eine Reihe von Spannungsmessungen.

+0

Sehr schöne Erklärung, danke! –

+1

Technisch gesehen ist es eine Reihe von Amplitudenmessungen. Es ist nur zufällig, dass die meisten ADCs Spannung verwenden, um die Amplitude darzustellen. –

+1

@SteveKuo technisch gesehen, das ist richtig, aber es scheint wie hinzufügen, dass in irgendeiner sinnvollen Weise würde das Problem sehr kompliziert. Und da dies keine elektrotechnische Baustelle ist ... – derobert

3

Ich denke, Proben der Wellenform bei einer bestimmten Abtastfrequenz wäre die einfachste Darstellung.

+0

http://en.wikipedia.org/wiki/Audio_file_format scheint dies auch anzuzeigen – Jimmy

+0

Korrekt - der Fachausdruck dafür ist "lineare Pulscodemodulation." –

2

Haben Sie jemals eine Wellenform in der Nähe betrachtet? Die Y-Achse wird einfach als eine ganze Zahl dargestellt, typischerweise in 16 Bits.

8

Audio kann durch digitale Samples dargestellt werden. Im Wesentlichen nimmt ein Sampler (auch als Analog-Digital-Wandler bezeichnet) einen Wert eines Audiosignals alle 1/fs, wobei fs die Abtastfrequenz ist. Der ADC quantisiert dann das Signal, das eine Rundungsoperation ist. Wenn Ihr Signal also zwischen 0 und 3 Volt liegt (Full Scale Range), wird ein Sample auf beispielsweise 16 Bit gerundet. In diesem Beispiel wird eine 16-Bit-Nummer einmal pro 1/fs/

aufgezeichnet. So wird beispielsweise bei den meisten WAV/MP3s ein Audiosignal mit 44 kHz abgetastet. Ich weiß nicht, wie detailliert Sie wollen, aber da ist die sogenannte "Nyquist Sampling Rate", die besagt, dass die Abtastfrequenz mindestens doppelt so hoch sein muss wie die gewünschte Frequenz. Auf Ihrer WAV/MP3-Datei können Sie bestenfalls 22 kHz-Frequenzen hören.

In diesem Bereich gibt es viele Details. Die einfachste Form wäre sicherlich das WAV-Format. Es ist unkomprimiertes Audio. Formate wie mp3 und ogg müssen dekomprimiert werden, bevor Sie mit ihnen arbeiten können.

2

Suchen Sie Dinge wie Analog-Digital-Konvertierung. Das sollte dich beginnen. Diese Geräte können ein Audiosignal (Sinuswellen) in digitale Darstellungen umwandeln. Ein 16-Bit-ADC könnte also einen Sinus zwischen -32768 und 32768 darstellen. Dies ist ein fester Punkt. Es ist auch möglich, es in Gleitkomma zu tun (obwohl dies aus Leistungsgründen nicht empfohlen wird, aber aus Platzgründen erforderlich sein kann). Das Gegenteil (Digital-Analog-Umwandlung) passiert, wenn wir Zahlen in Sinuswellen umwandeln. Dies wird von einem so genannten DAC gehandhabt.

2

Ich denke, ein guter Weg, um mit Audio zu spielen wäre mit Processing und Minim. Dieses Programm zeichnet das Frequenzspektrum des Klangs von Ihrem Mikrofon!

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

Der einfachste Weg, Klang als Zahlen darzustellen ist PCM (Pulse Code Modulation). Dies bedeutet, dass die Amplitude des Klangs mit einer festgelegten Frequenz aufgezeichnet wird (jeder Amplitudenwert wird als Sample bezeichnet). CD-Qualität Sound zum Beispiel ist 16-Bit-Samples (in Stereo) bei der Frequenz 44100 Hz.

Ein Sample kann als ganze Zahl (normalerweise 8, 12, 16, 24 oder 32 Bit) oder als Gleitkommazahl (16 Bit Float oder 32 Bit doppelt) dargestellt werden. Die Nummer kann entweder signiert oder nicht signiert sein.

Für 16 Bit vorzeichenbehaftete Samples wäre der Wert 0 in der Mitte und -32768 und 32767 wären die maximalen Amplituden. Für 16 Bit vorzeichenlose Samples wäre der Wert 32768 in der Mitte und 0 und 65535 wären die maximalen Amplituden.

Für Fließkomma-Samples ist das übliche Format, dass 0 in der Mitte liegt und -1.0 und 1.0 die maximalen Amplituden sind.

Die PCM-Daten können dann komprimiert werden, zum Beispiel mit MP3.

+0

Es ist erwähnenswert, dass bei der Darstellung von Ton als Integer die minimalen und maximalen Werte absolut sind; Wenn der Klang in mehreren Schritten bearbeitet wird und jeder Schritt diese Amplitude überschreiten würde, wird Clipping auftreten [in der Regel sehr harsch]. Wenn Floating-Point-Audio über mehrere Verarbeitungsschritte übertragen wird, wird es wahrscheinlich zu einem Clipping kommen, wenn das endgültige Audio Werte außerhalb des Bereichs von ± 1,0 aufweist. Zwischenstufen können jedoch außerhalb dieses Bereichs liegen, ohne Clipping zu verursachen. – supercat

2

Minimal C Zeugungs Beispiel

Das folgende Beispiel erzeugt einen reinen 1000k Hz Sinus im Rohformat. Bei 44,1 kHz Abtastrate, wird es 4 Sekunden dauern:

#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; 
} 

Wiedergabe mit:

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

Parameter erklärt unter: https://superuser.com/a/1063230/128124

Getestet auf Ubuntu 15.10. Mehr fun examples on GitHub, einschließlich eines einfachen Canon-Synth.

Physik

Audio wird als eine einzelne Zahl für jeden Moment in der Zeit codiert. Vergleichen Sie das mit einem Video, das WIDTH * HEIGHT Zahlen pro Moment benötigt.

Diese Nummer wird dann in der linearen Verschiebung der diaphragm des Lautsprechers:

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

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

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

Die Verschiebung Luft nach hinten und nach vorne schiebt, Druckdifferenzen zu schaffen, die als P-waves durch die Luft reisen.

Nur Verschiebung spielt eine Rolle: Ein konstantes Signal, auch wenn es maximal ist, erzeugt keinen Ton: Die Membran bleibt nur in einer festen Position.

Die sampling frequency bestimmt, wie schnell die Verschiebungen durchgeführt werden sollen.

44,1kHz ist eine gemeinsame Abtastfrequenz, weil Menschen bis zu 20 kHz und wegen der Nyquist–Shannon sampling theorem hören können.

Die Abtastfrequenz ist analog zu der FPS für Video, obwohl sie einen viel höheren Wert im Vergleich zu den 25 (Kino) - 144 (Hardcore Gaming Monitore) Bereich, den wir häufig für Video sehen, hat.

Formats

.raw ist ein underspecified Format, das nur die Amplitude Bytes und keine Metadaten enthält.

Wir müssen einige Meta-Parameter in der Befehlszeile wie die Abtastfrequenz übergeben, da das Format diese Daten nicht enthält.

Es gibt auch andere unkomprimierten Formaten, die alle erforderlichen Metadaten enthalten, z.B. , siehe: WAV File Synthesis From Scratch - C

In der Praxis beschäftigen sich die meisten Leute jedoch ausschließlich mit komprimierten Formaten, die Dateien/Streaming viel kleiner machen. Einige dieser Formate berücksichtigen Eigenschaften des menschlichen Gehörs, um die Audiodaten in einem verlustbehafteten Weg zu komprimieren.

Biologie

Menschen wahrnehmen Klang vor allem durch ihre Frequenzzerlegung (AKA Fourier transform).

Ich denke, das liegt daran, dass das Innenohr Teile hat, die zu verschiedenen Frequenzen schwingen (TODO bestätigen).

Deshalb wird, wenn Musik zu synthetisieren, denken wir mehr in Bezug auf den Frequenzen Addition statt Zeitpunkt. Dies wird in this example dargestellt.

Dies führt dazu, dass für jeden Zeitpunkt in einem 1D-Vektor zwischen 20Hz und 20kHz gedacht wird.

Die mathematische Fourier-Transformation verliert den Begriff der Zeit, also machen wir beim Synthetisieren Gruppen von Punkten und summieren Frequenzen für diese Gruppe und nehmen die Fourier-Transformation dort.

Glücklicherweise ist die Fourier-Transformation linear, sodass wir die Verschiebungen einfach addieren und normalisieren können.

Die Größe jeder Gruppe von Punkten führt zu einem Zeit - Frequenz - Präzisions - Kompromiss, vermittelt durch die gleiche Mathematik wie Heisenberg's uncertainty principle.

Wavelets kann eine genauere mathematische Beschreibung dieser intermediären Zeit - Frequenz - Beschreibung sein.

1

Es gibt 2 Schritte bei der Umwandlung von analogen Audio tatsächliche in eine digitale Form beteiligt.

  1. Sampling
  2. Quantization

Sampling

Die Rate, mit der eine kontinuierliche Wellenform (in diesem Fall, Audio) abgetastet wird, die Abtastrate bezeichnet. Der vom Menschen wahrgenommene Frequenzbereich beträgt 20 - 20.000 Hz. CDs verwenden jedoch das Nyquist-Abtasttheorem, was eine Abtastrate von 44.100 Hz bedeutet und Frequenzen im Bereich von 0 bis 22.050 Hz abdeckt.

Quantization

Der diskrete Satz von Werten aus der ‚Sampling‘ Phase nun in eine endliche Anzahl von Werten umgewandelt müssen empfangen werden. Eine 8-Bit-Quantisierung liefert 256 mögliche Werte, während eine 16-Bit-Quantisierung bis zu 65.536 Werte bereitstellt.

0

Die Antworten beziehen sich alle auf Sampling-Frequenz, aber nicht auf die Frage. Ein bestimmter Schnappschuss eines Klangs würde, wie ich mir vorstelle, einzelne Amplituden für viele verschiedene Frequenzen enthalten (sagen wir, dass Sie sowohl ein A als auch ein C gleichzeitig auf einer Tastatur schlagen, wobei das A lauter ist). Wie wird das in einer 16-Bit-Nummer aufgezeichnet? Wenn Sie nur die Amplitude messen (wie laut der Klang ist), wie bekommen Sie die verschiedenen Noten?

Ah! Ich denke, ich verstehe es aus diesem Kommentar: "Diese Zahl wird dann in die lineare Verschiebung der Membran Ihres Lautsprechers umgewandelt." Die Noten erscheinen dadurch, wie schnell die Membran vibriert. Deshalb brauchen Sie die 44.000 verschiedenen Werte pro Sekunde. Eine Note liegt irgendwo in der Größenordnung von 1000 Hertz, so würde eine reine Note das Diaphragma etwa 1000 Mal pro Sekunde ein- und ausfahren lassen. Eine Aufnahme einer ganzen Orchestra hat viele verschiedene Noten überall, und das kann wunderbarerweise in eine einmalige Geschichte der Membranbewegung umgewandelt werden. 44.000 Mal pro Sekunde wird das Zwerchfell angewiesen, sich ein wenig nach innen oder außen zu bewegen, und diese einfache (lange) Liste von Zahlen kann Beyonce für Beethoven darstellen!

Verwandte Themen