Buckets:
| <meta charset="utf-8" /><meta name="hf:doc:metadata" content="{"title":"Introduction aux données audio","local":"introduction-aux-données-audio","sections":[{"title":"Amplitude et profondeur de bits","local":"amplitude-et-profondeur-de-bits","sections":[],"depth":2},{"title":"L’audio comme forme d’onde","local":"laudio-comme-forme-donde","sections":[],"depth":2},{"title":"Le spectre de fréquences","local":"le-spectre-de-fréquences","sections":[],"depth":2},{"title":"Spectrogramme","local":"spectrogramme","sections":[],"depth":2},{"title":"Spectrogramme Mel","local":"spectrogramme-mel","sections":[],"depth":2}],"depth":1}"> | |
| <link href="/docs/audio-course/pr_239/fr/_app/immutable/assets/0.e3b0c442.css" rel="modulepreload"> | |
| <link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/entry/start.48d22ca3.js"> | |
| <link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/chunks/scheduler.a045fce0.js"> | |
| <link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/chunks/singletons.932e46dd.js"> | |
| <link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/chunks/index.2447c7d9.js"> | |
| <link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/chunks/paths.50fd3c21.js"> | |
| <link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/entry/app.4e1ef9b0.js"> | |
| <link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/chunks/preload-helper.aa8f5fd5.js"> | |
| <link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/chunks/index.5135b896.js"> | |
| <link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/nodes/0.00a7cda2.js"> | |
| <link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/chunks/each.e59479a4.js"> | |
| <link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/nodes/5.e91b938e.js"> | |
| <link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/chunks/Tip.872c1b89.js"> | |
| <link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/chunks/MermaidChart.svelte_svelte_type_style_lang.59591d32.js"> | |
| <link rel="modulepreload" href="/docs/audio-course/pr_239/fr/_app/immutable/chunks/CodeBlock.1d730892.js"><!-- HEAD_svelte-u9bgzb_START --><meta name="hf:doc:metadata" content="{"title":"Introduction aux données audio","local":"introduction-aux-données-audio","sections":[{"title":"Amplitude et profondeur de bits","local":"amplitude-et-profondeur-de-bits","sections":[],"depth":2},{"title":"L’audio comme forme d’onde","local":"laudio-comme-forme-donde","sections":[],"depth":2},{"title":"Le spectre de fréquences","local":"le-spectre-de-fréquences","sections":[],"depth":2},{"title":"Spectrogramme","local":"spectrogramme","sections":[],"depth":2},{"title":"Spectrogramme Mel","local":"spectrogramme-mel","sections":[],"depth":2}],"depth":1}"><!-- HEAD_svelte-u9bgzb_END --> <p></p> <div class="items-center shrink-0 min-w-[100px] max-sm:min-w-[50px] justify-end ml-auto flex" style="float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"><div class="inline-flex rounded-md max-sm:rounded-sm"><button class="inline-flex items-center gap-1 h-7 max-sm:h-7 px-2 max-sm:px-1.5 text-sm font-medium text-gray-800 border border-r-0 rounded-l-md max-sm:rounded-l-sm border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-live="polite"><span class="inline-flex items-center justify-center rounded-md p-0.5 max-sm:p-0 hover:text-gray-800 dark:hover:text-gray-200"><svg class="sm:size-3.5 size-3" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg></span> <span>Copy page</span></button> <button class="inline-flex items-center justify-center w-6 max-sm:w-5 h-7 max-sm:h-7 disabled:pointer-events-none text-sm text-gray-500 hover:text-gray-700 dark:hover:text-white rounded-r-md max-sm:rounded-r-sm border border-l transition border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-haspopup="menu" aria-expanded="false" aria-label="Open copy menu"><svg class="transition-transform text-gray-400 overflow-visible sm:size-3.5 size-3 rotate-0" width="1em" height="1em" viewBox="0 0 12 7" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L6 6L11 1" stroke="currentColor"></path></svg></button></div> </div> <h1 class="relative group"><a id="introduction-aux-données-audio" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#introduction-aux-données-audio"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Introduction aux données audio</span></h1> <p data-svelte-h="svelte-1yhtoya">Le <strong>taux d’échantillonnage</strong> (également appelé fréquence d’échantillonnage) est le nombre d’échantillons prélevés en une seconde et est mesuré en hertz (Hz). | |
| Pour vous donner un point de référence, l’audio de qualité CD a un taux d’échantillonnage de 44 100 Hz, ce qui signifie que les échantillons sont prélevés 44 100 fois par seconde. À titre de comparaison, l’audio haute résolution a un taux d’échantillonnage de 192 000 Hz ou 192 kHz. | |
| Un taux d’échantillonnage couramment utilisé dans les modèles vocaux d’apprentissage est de 16 000 Hz ou 16 kHz.</p> <p data-svelte-h="svelte-5h5pin">Le choix de la fréquence d’échantillonnage détermine principalement la fréquence la plus élevée qui peut être capturée à partir du signal. | |
| Ceci est également connu sous le nom de limite de Nyquist et correspond exactement à la moitié du taux d’échantillonnage. | |
| Les fréquences audibles dans la parole humaine sont inférieures à 8 kHz et, par conséquent, l’échantillonnage de la parole à 16 kHz est suffisant. | |
| L’utilisation d’un taux d’échantillonnage plus élevé ne permettra pas de capturer plus d’informations et ne fera qu’augmenter le coût de calcul du traitement de ces fichiers. | |
| D’autre part, l’échantillonnage audio à un taux d’échantillonnage trop faible entraînera une perte d’informations. | |
| La parole échantillonnée à 8 kHz sonnera étouffée car les fréquences plus élevées ne peuvent pas être capturées à ce rythme.</p> <p data-svelte-h="svelte-8k2tjg">Il est important de vous assurer que tous les exemples audio de votre jeu de données ont le même taux d’échantillonnage lorsque vous travaillez sur une tâche audio. | |
| Si vous prévoyez d’utiliser des données audio personnalisées pour finetuner un modèle pré-entraîné, le taux d’échantillonnage de vos données doit correspondre au taux d’échantillonnage des données sur lesquelles le modèle a été pré-entraîné. | |
| La fréquence d’échantillonnage détermine l’intervalle de temps entre les échantillons audio successifs, ce qui a un impact sur la résolution temporelle des données audio. | |
| Prenons un exemple : un son de 5 secondes à une fréquence d’échantillonnage de 16 000 Hz sera représenté comme une série de 80 000 valeurs, tandis que le même son de 5 secondes à une fréquence d’échantillonnage de 8 000 Hz sera représenté comme une série de 40 000 valeurs. | |
| Les <em>transformers</em> qui résolvent les tâches audio traitent les exemples comme des séquences et s’appuient sur des mécanismes d’attention pour apprendre l’audio ou la représentation multimodale. | |
| Étant donné que les séquences sont différentes pour les exemples audio à des taux d’échantillonnage différents, il sera difficile pour les modèles de généraliser entre les taux d’échantillonnage. | |
| <strong>Le rééchantillonnage</strong> est le processus de mise en correspondance des taux d’échantillonnage et fait partie du <a href="preprocessing#resampling-the-audio-data">prétraitement</a> des données audio.</p> <h2 class="relative group"><a id="amplitude-et-profondeur-de-bits" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#amplitude-et-profondeur-de-bits"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Amplitude et profondeur de bits</span></h2> <p data-svelte-h="svelte-zzn0k">Bien que le taux d’échantillonnage vous indique à quelle fréquence les échantillons sont prélevés, quelles sont exactement les valeurs de chaque échantillon? | |
| Le son est produit par des changements de pression atmosphérique à des fréquences audibles pour les humains. | |
| L’<strong>amplitude</strong> d’un son décrit le niveau de pression acoustique à un instant donné et est mesurée en décibels (dB). | |
| Nous percevons l’amplitude comme un volume sonore. Pour vous donner un exemple, une voix normale est inférieure à 60 dB, et un concert de rock peut être autour de 125 dB, repoussant les limites de l’audition humaine. | |
| En audio, chaque échantillon enregistre l’amplitude de l’onde à un moment donné. | |
| La <strong>profondeur de bits</strong> de l’échantillon détermine avec quelle précision cette valeur d’amplitude peut être décrite. | |
| Plus la profondeur de bits est élevée, plus la représentation numérique se rapproche fidèlement de l’onde sonore continue d’origine. | |
| Les profondeurs de bits audio les plus courantes sont 16 bits et 24 bits. | |
| Chacun est un terme binaire, représentant le nombre d’étapes possibles auxquelles la valeur d’amplitude peut être quantifiée lorsqu’elle est convertie de continue à discrète: 65 536 étapes pour l’audio 16 bits, 16 777 216 étapes pour l’audio 24 bits. | |
| Étant donné que la quantification implique d’arrondir la valeur continue à une valeur discrète, le processus d’échantillonnage introduit du bruit. Plus la profondeur de bits est élevée, plus ce bruit de quantification est faible. | |
| En pratique, le bruit de quantification de l’audio 16 bits est déjà suffisamment faible pour être inaudible et l’utilisation de profondeurs de bits plus élevées n’est généralement pas nécessaire. | |
| Vous pouvez également rencontrer de l’audio 32 bits. | |
| Cela stocke les échantillons sous forme de valeurs à virgule flottante, tandis que l’audio 16 bits et 24 bits utilise des échantillons entiers. | |
| La précision d’une valeur à virgule flottante de 32 bits est de 24 bits, ce qui lui donne la même profondeur de bits que l’audio 24 bits. | |
| Les échantillons audio en virgule flottante devraient se situer dans la plage [-1.0, 1.0]. | |
| Étant donné que les modèles d’apprentissage automatique fonctionnent naturellement sur des données en virgule flottante, l’audio doit d’abord être converti au format à virgule flottante avant de pouvoir être utilisé pour entraîner le modèle. | |
| Nous verrons comment faire cela dans la section suivante sur le [Prétraitement] (preprocessing). | |
| Tout comme pour les signaux audio continus, l’amplitude de l’audio numérique est généralement exprimée en décibels (dB). | |
| L’audition humaine étant de nature logarithmique - nos oreilles sont plus sensibles aux petites fluctuations des sons calmes qu’à celles des sons forts - l’intensité d’un son est plus facile à interpréter si les amplitudes sont exprimées en décibels, qui sont également logarithmiques. | |
| L’échelle de décibels pour l’audio réel commence à 0 dB, ce qui représente le son le plus faible possible que les humains peuvent entendre, et les sons plus forts ont des valeurs plus importantes. | |
| Cependant, pour les signaux audio numériques, 0 dB est l’amplitude la plus forte possible, tandis que toutes les autres amplitudes sont négatives. | |
| En règle générale: chaque -6 dB est une réduction de moitié de l’amplitude, et tout ce qui est inférieur à -60 dB est généralement inaudible à moins que vous n’augmentiez vraiment le volume.</p> <h2 class="relative group"><a id="laudio-comme-forme-donde" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#laudio-comme-forme-donde"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>L’audio comme forme d’onde</span></h2> <p data-svelte-h="svelte-1ezir76">Vous avez peut-être vu des sons visualisés sous la <strong>forme d’onde</strong> qui traçant les valeurs de l’échantillon au fil du temps et illustrant les changements d’amplitude du son. Ceci est aussi connu sous le nom de représentation du <em>domaine temporel</em> du son. | |
| Ce type de visualisation est utile pour identifier des caractéristiques spécifiques du signal audio telles que la synchronisation des événements sonores individuels, l’intensité sonore globale du signal et toute irrégularité ou bruit présent dans l’audio.</p> <p data-svelte-h="svelte-16hip7z">Pour tracer la forme d’onde d’un signal audio, nous pouvons utiliser une bibliothèque Python <code>librosa</code>:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START -->pip install librosa<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-3smnvl">Prenons un exemple de son appelé « trompette » qui vient avec la bibliothèque:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START --><span class="hljs-keyword">import</span> librosa | |
| array, sampling_rate = librosa.load(librosa.ex(<span class="hljs-string">"trumpet"</span>))<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-s787dm">L’exemple est chargé sous la forme d’un tuple de séries temporelles audio (ici nous l’appelons <code>array</code>) et de taux d’échantillonnage (<code>sampling_rate</code>). | |
| Jetons un coup d’œil à la forme d’onde de ce son en utilisant la fonction <code>waveshow()</code> de librosa:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START --><span class="hljs-keyword">import</span> matplotlib.pyplot <span class="hljs-keyword">as</span> plt | |
| <span class="hljs-keyword">import</span> librosa.display | |
| plt.figure().set_figwidth(<span class="hljs-number">12</span>) | |
| librosa.display.waveshow(array, sr=sampling_rate)<!-- HTML_TAG_END --></pre></div> <div class="flex justify-center" data-svelte-h="svelte-1cse5se"><img src="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/waveform_plot.png" alt="Waveform plot"></div> <p data-svelte-h="svelte-17xwv25">Cela trace l’amplitude du signal sur l’axe des y et le temps le long de l’axe des x. | |
| En d’autres termes, chaque point correspond à une seule valeur d’échantillon qui a été prise lors de l’échantillonnage de ce son. | |
| Notez également que librosa renvoie déjà l’audio sous forme de valeurs à virgule flottante et que les valeurs d’amplitude sont effectivement comprises dans la plage [-1.0, 1.0]. | |
| Visualiser l’audio et l’écouter peut être un outil utile pour comprendre les données avec lesquelles vous travaillez. | |
| Vous pouvez voir la forme du signal, observer des modèles, apprendre à repérer le bruit ou la distorsion. | |
| Si vous prétraitez les données d’une manière ou d’une autre, telle que la normalisation, le rééchantillonnage ou le filtrage, vous pouvez confirmer visuellement que les étapes de prétraitement ont été appliquées comme prévu. | |
| Après avoir entraîné un modèle, vous pouvez également visualiser des exemples où des erreurs se produisent (par exemple, dans la tâche de classification audio) pour déboguer le problème.</p> <h2 class="relative group"><a id="le-spectre-de-fréquences" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#le-spectre-de-fréquences"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Le spectre de fréquences</span></h2> <p data-svelte-h="svelte-kj32ro">Une autre façon de visualiser les données audio consiste à tracer le <strong>spectre de fréquences</strong> d’un signal audio, également connu sous le nom de représentation du <em>domaine fréquentiel</em>. | |
| Le spectre est calculé à l’aide de la transformée de Fourier discrète ou TFD. Il décrit les fréquences individuelles qui composent le signal et leur force. | |
| Traçons le spectre de fréquences pour le même son de trompette en prenant la TFD en utilisant la fonction <code>rfft()</code> de numpy. Bien qu’il soit possible de tracer le spectre de l’ensemble du son, il est plus utile de regarder une petite région à la place. | |
| Ici, nous allons prendre la TFD sur les 4096 premiers échantillons, ce qui correspond à peu près à la longueur de la première note jouée:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START --><span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np | |
| TFD_input = array[:<span class="hljs-number">4096</span>] | |
| <span class="hljs-comment"># calculer la TDF</span> | |
| window = np.hanning(<span class="hljs-built_in">len</span>(TFD_input)) | |
| windowed_input = TFD_input * window | |
| TFD = np.fft.rfft(windowed_input) | |
| <span class="hljs-comment"># obtenir le spectre d'amplitude en décibels</span> | |
| amplitude = np.<span class="hljs-built_in">abs</span>(TFD) | |
| amplitude_db = librosa.amplitude_to_db(amplitude, ref=np.<span class="hljs-built_in">max</span>) | |
| <span class="hljs-comment"># obtenir les bacs de fréquence</span> | |
| frequency = librosa.fft_frequencies(sr=sampling_rate, n_fft=<span class="hljs-built_in">len</span>(TFD_input)) | |
| plt.figure().set_figwidth(<span class="hljs-number">12</span>) | |
| plt.plot(frequency, amplitude_db) | |
| plt.xlabel(<span class="hljs-string">"Frequency (Hz)"</span>) | |
| plt.ylabel(<span class="hljs-string">"Amplitude (dB)"</span>) | |
| plt.xscale(<span class="hljs-string">"log"</span>)<!-- HTML_TAG_END --></pre></div> <div class="flex justify-center" data-svelte-h="svelte-1eg4i6m"><img src="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/spectrum_plot.png" alt="Spectrum plot"></div> <p data-svelte-h="svelte-ihcn0i">Cela trace la force des différentes composantes de fréquence présentes dans ce segment audio. Les valeurs de fréquence sont sur l’axe des abscisses, généralement tracées sur une échelle logarithmique, tandis que leurs amplitudes sont sur l’axe des y.</p> <p data-svelte-h="svelte-vnh1rc">Le spectre de fréquences que nous avons tracé montre plusieurs pics. | |
| Ces pics correspondent aux harmoniques de la note jouée, les harmoniques supérieures étant plus calmes. Puisque le premier pic est à environ 620 Hz, c’est le spectre de fréquence d’une♭ note Mi.</p> <p data-svelte-h="svelte-12fr59y">La sortie de la TDF est un tableau de nombres complexes, composé de composants réels et imaginaires. | |
| Prendre la magnitude avec <code>np.abs(TFD)</code> extrait l’information d’amplitude du spectrogramme. | |
| L’angle entre les composants réels et imaginaires fournit ce que l’on appelle le spectre de phase, mais il est souvent écarté dans les applications d’apprentissage automatique. | |
| Nous utilions <code>librosa.amplitude_to_db()</code> pour convertir les valeurs d’amplitude en échelle de décibels, ce qui facilite la visualisation des détails les plus fins du spectre. | |
| Parfois, les gens utilisent le <strong>spectre de puissance</strong>, qui mesure l’énergie plutôt que l’amplitude. Il s’agit simplement d’un spectre avec les valeurs d’amplitude au carré.</p> <blockquote class="tip">💡 En pratique, les gens utilisent le terme FFT de manière interchangeable avec TFD, car la FFT ou transformée de Fourier rapide est le seul moyen efficace de calculer la TFD sur un ordinateur.</blockquote> <p data-svelte-h="svelte-1h44fc6">Le spectre de fréquences d’un signal audio contient exactement la même information que sa forme d’onde. Ce sont simplement deux façons différentes de regarder les mêmes données (ici, les 4096 premiers échantillons du son de la trompette). | |
| Là où la forme d’onde trace l’amplitude du signal audio au fil du temps, le spectre visualise les amplitudes des fréquences individuelles à un moment donné.</p> <h2 class="relative group"><a id="spectrogramme" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#spectrogramme"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Spectrogramme</span></h2> <p data-svelte-h="svelte-7ij193">Et si nous voulons voir comment les fréquences d’un signal audio changent ? La trompette joue plusieurs notes et elles ont toutes des fréquences différentes. | |
| Le problème est que le spectre ne montre qu’un instantané figé des fréquences à un instant donné. | |
| La solution consiste à prendre plusieurs TFD, chacune ne couvrant qu’une petite tranche de temps, et à empiler les spectres résultants dans un <strong>spectrogramme</strong>.</p> <p data-svelte-h="svelte-r74d8p">Un spectrogramme trace le contenu en fréquence d’un signal audio au fil du temps. Il vous permet de voir le temps, la fréquence et l’amplitude sur un seul graphique. L’algorithme qui effectue ce calcul est la TFCT ou transformée de Fourier à court terme. | |
| Le spectrogramme est l’un des outils audio les plus informatifs à notre disposition. | |
| Par exemple, lorsque nous travaillons avec un enregistrement musical, nous pouvons voir les différents instruments et pistes vocales et comment ils contribuent au son global. Dans la parole, nous pouvons identifier différents sons de voyelles car chaque voyelle est caractérisée par des fréquences particulières. | |
| Traçons un spectrogramme pour le même son de trompette, en utilisant les fonctions <code>stft()</code> et <code>specshow()</code> de librosa:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START --><span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np | |
| D = librosa.stft(array) | |
| S_db = librosa.amplitude_to_db(np.<span class="hljs-built_in">abs</span>(D), ref=np.<span class="hljs-built_in">max</span>) | |
| plt.figure().set_figwidth(<span class="hljs-number">12</span>) | |
| librosa.display.specshow(S_db, x_axis=<span class="hljs-string">"time"</span>, y_axis=<span class="hljs-string">"hz"</span>) | |
| plt.colorbar()<!-- HTML_TAG_END --></pre></div> <div class="flex justify-center" data-svelte-h="svelte-b6kbs6"><img src="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/spectrogram_plot.png" alt="Spectrogram plot"></div> <p data-svelte-h="svelte-1l13r2r">Dans ce graphique, l’axe des x représente le temps comme dans la visualisation de la forme d’onde, mais maintenant l’axe des y représente la fréquence en Hz. | |
| L’intensité de la couleur donne l’amplitude ou la puissance de la composante fréquence à chaque point dans le temps, mesurée en décibels (dB).</p> <p data-svelte-h="svelte-16erb08">Le spectrogramme est créé en prenant de courts segments du signal audio, généralement de quelques millisecondes, et en calculant la transformée de Fourier discrète de chaque segment pour obtenir son spectre de fréquences. | |
| Les spectres résultants sont ensuite empilés sur l’axe temporel pour créer le spectrogramme. | |
| Chaque tranche verticale de cette image correspond à un spectre de fréquences unique, vu du haut. | |
| Par défaut, <code>librosa.stft()</code> divise le signal audio en segments de 2048 échantillons, ce qui donne un bon compromis entre la résolution de fréquence et la résolution temporelle. | |
| Étant donné que le spectrogramme et la forme d’onde sont des vues différentes des mêmes données, il est possible de retourner le spectrogramme dans la forme d’onde d’origine en utilisant la TFCT inverse. | |
| Cependant, cela nécessite les informations de phase en plus des informations d’amplitude. Si le spectrogramme a été généré par un modèle d’apprentissage automatique, il ne produit généralement que les amplitudes. | |
| Dans ce cas, nous pouvons utiliser un algorithme de reconstruction de phase tel que l’algorithme classique de Griffin-Lim, ou en utilisant un réseau neuronal appelé vocodeur, pour reconstruire une forme d’onde à partir du spectrogramme.</p> <p data-svelte-h="svelte-7b568s">Les spectrogrammes ne sont pas seulement utilisés pour la visualisation. De nombreux modèles d’apprentissage automatique prendront des spectrogrammes en entrée, par opposition aux formes d’onde, et produiront des spectrogrammes en sortie. | |
| Maintenant que nous savons ce qu’est un spectrogramme et comment il est fabriqué, jetons un coup d’œil à une variante de celui-ci largement utilisée pour le traitement de la parole: le spectrogramme mel.</p> <h2 class="relative group"><a id="spectrogramme-mel" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#spectrogramme-mel"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Spectrogramme Mel</span></h2> <p data-svelte-h="svelte-1ngr0tc">Un spectrogramme mel est une variante du spectrogramme couramment utilisée dans les tâches de traitement de la parole et d’apprentissage automatique. | |
| Il est similaire à un spectrogramme en ce sens qu’il montre le contenu en fréquence d’un signal audio au fil du temps, mais sur un axe de fréquence différent. | |
| Dans un spectrogramme standard, l’axe de fréquence est linéaire et est mesuré en hertz (Hz). | |
| Cependant, le système auditif humain est plus sensible aux changements dans les basses fréquences que dans les fréquences plus élevées, et cette sensibilité diminue logarithmiquement à mesure que la fréquence augmente. | |
| L’échelle mel est une échelle perceptuelle qui se rapproche de la réponse en fréquence non linéaire de l’oreille humaine. | |
| Pour créer un spectrogramme mel, le STFT est utilisé comme auparavant, divisant l’audio en segments courts pour obtenir une séquence de spectres de fréquence. | |
| De plus, chaque spectre est envoyé à travers un ensemble de filtres, appelé <em>mel filterbank</em>, pour transformer les fréquences à l’échelle mel. | |
| Voyons comment nous pouvons tracer un spectrogramme mel en utilisant la fonction <code>melspectrogram()</code> de librosa, qui effectue toutes ces étapes pour nous:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START -->S = librosa.feature.melspectrogram(y=array, sr=sampling_rate, n_mels=<span class="hljs-number">128</span>, fmax=<span class="hljs-number">8000</span>) | |
| S_dB = librosa.power_to_db(S, ref=np.<span class="hljs-built_in">max</span>) | |
| plt.figure().set_figwidth(<span class="hljs-number">12</span>) | |
| librosa.display.specshow(S_dB, x_axis=<span class="hljs-string">"time"</span>, y_axis=<span class="hljs-string">"mel"</span>, sr=sampling_rate, fmax=<span class="hljs-number">8000</span>) | |
| plt.colorbar()<!-- HTML_TAG_END --></pre></div> <div class="flex justify-center" data-svelte-h="svelte-1soplef"><img src="https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/mel-spectrogram.png" alt="Mel spectrogram plot"></div> <p data-svelte-h="svelte-17vtvke">Dans l’exemple ci-dessus, <code>n_mels</code> représente le nombre de bandes mel à générer. | |
| Les bandes mel définissent un ensemble de gammes de fréquences qui divisent le spectre en composantes perceptuellement significatives, en utilisant un ensemble de filtres dont la forme et l’espacement sont choisis pour imiter la façon dont l’oreille humaine répond à différentes fréquences. | |
| Les valeurs courantes pour <code>n_mels</code> sont 40 ou 80. <code>fmax</code> indique la fréquence la plus élevée (en Hz) qui nous intéresse. | |
| Tout comme avec un spectrogramme standard, il est courant d’exprimer la force des composantes de fréquence mel en décibels. | |
| C’est ce qu’on appelle communément un <strong>spectrogramme log-mel</strong>, car la conversion en décibels implique une opération logarithmique. | |
| L’exemple ci-dessus utilisé <code>librosa.power_to_db()</code> car <code>librosa.feature.melspectrogram()</code> crée un spectrogramme de puissance.</p> <blockquote class="tip">💡 Tous les spectrogrammes mel ne sont pas identiques ! Il existe deux échelles mel différentes d'usage courant (« htk » et « slaney »), et au lieu du spectrogramme de puissance, le spectrogramme d'amplitude peut être utilisé. | |
| La conversion en spectrogramme log-mel ne calcule pas toujours les décibels vrais, mais peut simplement prendre le « log ». | |
| Par conséquent, si un modèle d'apprentissage automatique attend un spectrogramme mel en entrée, vérifiez deux fois pour vous assurer que vous le calculez de la même manière.</blockquote> <p data-svelte-h="svelte-11eojgq">La création d’un spectrogramme mel est une opération avec perte car elle implique le filtrage du signal. | |
| La conversion d’un spectrogramme mel en une forme d’onde est plus difficile que de le faire pour un spectrogramme régulier, car cela nécessite d’estimer les fréquences qui ont été jetées. | |
| C’est pourquoi des modèles d’apprentissage automatique tels que le vocodeur HiFiGAN sont nécessaires pour produire une forme d’onde à partir d’un spectrogramme mel. | |
| Comparé à un spectrogramme standard, un spectrogramme mel peut capturer des caractéristiques plus significatives du signal audio pour la perception humaine, ce qui en fait un choix populaire dans des tâches telles que la reconnaissance vocale, l’identification du locuteur et la classification des genres musicaux. | |
| Maintenant que vous savez comment visualiser des exemples de données audio, essayez de voir à quoi ressemblent vos sons préférés :)</p> <a class="!text-gray-400 !no-underline text-sm flex items-center not-prose mt-4" href="https://github.com/huggingface/audio-transformers-course/blob/main/chapters/fr/chapter1/audio_data.mdx" target="_blank"><svg class="mr-1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M31,16l-7,7l-1.41-1.41L28.17,16l-5.58-5.59L24,9l7,7z"></path><path d="M1,16l7-7l1.41,1.41L3.83,16l5.58,5.59L8,23l-7-7z"></path><path d="M12.419,25.484L17.639,6.552l1.932,0.518L14.351,26.002z"></path></svg> <span data-svelte-h="svelte-zjs2n5"><span class="underline">Update</span> on GitHub</span></a> <p></p> | |
| <script> | |
| { | |
| __sveltekit_oc6cu6 = { | |
| assets: "/docs/audio-course/pr_239/fr", | |
| base: "/docs/audio-course/pr_239/fr", | |
| env: {} | |
| }; | |
| const element = document.currentScript.parentElement; | |
| const data = [null,null]; | |
| Promise.all([ | |
| import("/docs/audio-course/pr_239/fr/_app/immutable/entry/start.48d22ca3.js"), | |
| import("/docs/audio-course/pr_239/fr/_app/immutable/entry/app.4e1ef9b0.js") | |
| ]).then(([kit, app]) => { | |
| kit.start(app, element, { | |
| node_ids: [0, 5], | |
| data, | |
| form: null, | |
| error: null | |
| }); | |
| }); | |
| } | |
| </script> | |
Xet Storage Details
- Size:
- 43.7 kB
- Xet hash:
- 67436873b7a44ec07f236d5d9c9f57f27f898c80e975ab447236ffe403c1d516
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.