Essais sur l'audio

Après quelques année pour digérer le choc de la retraite, je reviens à mes occupations
Dossier sons

Un bit est la base du langage électrique, il peut prendre deux valeurs 0 ou 1, ces deux valeurs ne sont pas de l’adressage, ces deux valeurs ne sont pas des quantités, ces deux valeurs indiquent que c’est passant, la position (si le courant électrique passe). Nous pouvons utiliser des mécanismes physiques avec plus ou moins de frottement, du pneumatique qui apporte puissante et vitesse, des disjoncteurs 220 V pour la sécurité, ou des transistors pour économiser l’énergie, des lampes magnétiques qui apportent l’analogique … Le dossier présent utilise l’informatique, donc les portes (bit) sont des transistors.

Un octet est un multiple binaire du bit, il s’écrit avec 27 + 25 + 21 + 20 ,. donc 4 symboles et a 163 adresses.

Les fichiers informatiques, sont identifiés par une sorte de meta tags, des données en début de fichier qui indiquent que nous avons un fichier audio.

Les sons sont des formes de variations de pressions d’air que notre oreille perçoit. Nous produisons ces formes à l’aide d’un électroaimant qui déplace une membrane. Notre démarche est d’écrire un code qui va générer, nos propre sons, musique , ou voix humaine en y passant plus de temps.

Pour générer un fichier son, il faut en premier écrire l’entête. Pour du waw : 44 octets.

RIFF

(0x52,0x49,0x46,0x46) Taille du fichier moins 8 octets ici

WAVE

(0x57,0x41,0x56,0x45) 4 octets

fmt␣

» (0x66,0x6D, 0x74,0x20) 4 octets) : Nombre d’octets du bloc - 16 (0x10) AudioFormat (2 octets) : Format du stockage dans le fichier (1: PCM entier, 3: PCM flottant, 65534: WAVE_FORMAT_EXTENSIBLE) NbrCanaux (2 octets) : Nombre de canaux (de 1 à 6, cf. ci-dessous) Frequence (4 octets) : Fréquence d’échantillonnage (en hertz) [Valeurs standardisées : 11 025, 22 050, 44 100 et éventuellement 48 000 et 96 000] BytePerSec (4 octets) : Nombre d’octets à lire par seconde (c.-à-d., Frequence * BytePerBloc). BytePerBloc (2 octets) : Nombre d’octets par bloc d’échantillonnage (c.-à-d., tous canaux confondus : NbrCanaux * BitsPerSample/8). BitsPerSample (2 octets) : Nombre de bits utilisés pour le codage de chaque échantillon (8, 16, 24) [Bloc des données]

data

(0x64,0x61,0x74,0x61) 4 octets taille_du_fichier taille_de_l’entête (qui fait 44 octets normalement). DATAS : [Octets du Sample 1 du Canal 1] Les Canaux : 1 pour mono, 2 pour stéréo Les octets des mots sont stockés sous la forme little endian Nous avons besoin d’un éditeur de fichier en hexadécimal, comme j’utilise ubuntu, cela donne en terminal: sudo apt install ghex -y ghex Sur les touche clavier faire Ctrl + N puis écrire 52 49 46 46 … voir capture d’écran i![|643x481]


(file:///tmp/lu1400856gcd.tmp/lu1400856geb_tmp_1e714f25.png) ci j’ai écris 6 secondes en mono donc 868D0800 fmt puis 10 00 00 00 pour le nombre d’octets du bloc. Comme je veux du mono, j’ai mis 01, … Copier le reste la création commence après data.

De manière à avoir un format plus facile à manipuler, je sélectionne dans l’entête le PCM 16 mono, le son ai a cette forme


et sous ghex sont entête est

En introduisant des ondes (surface plus grande) entre les pics, nous obtenons le son o

et sous ghex le son o donne


La particularité des fichiers générés sont qu’ils sont amortis de manière à pouvoir y associer les consonnes à l’extérieure, c’est bien plus facile pour associer les sons
Cordialement

J’ai commencé par les voyelles car elles font partie de la même dimension, la même forme de loi physique d’ailleurs les celtes les avaient rangé dans la même classe de lettre, il y a 5 classes de lettres dans leur écriture. De plus pour la majorité des consones c’est bien plus facile, c’est une histoire d’intensité en équilibre avec la distance que nous entendons telle ou telle consonne, c’est la même forme. La démarche est de recréer un programme qui génère les sons désirés. Cordialement

le son u est toujours dans la même dimension comme pour le son i se sont des paquets de petites variations qui sont ajoutés, la forme générale est la même avec ses formes particulières ajoutées.
voir audacity


en ghex

Comme indiqué la plupart des consonnes sont une simple onde placée en avant, selon l’intensité et la distance nous entendons une consonne différente.
En exemple le son C est une onde que j’ajoute devant le son o et ça donne le son co, le son c ne peut s’entendre tout seul.


avant le très vertical noir droit c’est l’onde ajouté, en augmentant l’intensité j’aurai pu mettre moins d’onde et j’aurai eu le même son. Après le curseur c’est le son o, présenté précédemment, si nous commençons la lecture après le trait noir, nous entendons que le son o
ghex

Pour continuer sur les consonnes, donc dans la dimension ouverte par les formes de consonnes. Prenons le cas du son L, c’est une augmentation progressive d’onde rapide. Si au lieu de suivre une augmentation rapide de front d’onde, nous démarrons la lecture du son au milieu de la forme du son L, nous obtenons le son P’. Le son L et le son P sont à la même distance, nous pouvons dire que le son L est un son P auquel nous ajoutons devant un démarrage plus doux.
si nous lisons le fichier audio en entier nous avons Lo, si nous lisons le fichier audio à partir du trait vertical gris, nous avons le son po, si nous lisons sans la forme ajouté nous avons le son o


Il est à noter que la forme ajoutée, ne supporterai pas de passer dans un équalizer de fréquence entre 100 et 150 Hertz, c’est en intégrant dans la voyelle que ça peut passer sous équalizer, mais il faut d’abord que j’arrive à transmettre les lois de base, les lois de chacune des 5 dimensions avant de parler des lois secondaires.
Ici il faut retenir son L démarrage doux, son P démarrage brusque

Pour revenir sur les voyelles, prenons le cas du son e, il suffit modifier en moins rapide les ondes supérieurs à 1.5 khz pour que la forme donnant le son e donne le son o. Si nous continuons en gardant la même forme mais que nous réduisons toutes les ondes supérieures à 250 Hz, avec la même forme nous obtenons le son « ou »


Ainsi pour générer comme pour les consonnes, les sons de plusieurs voyelles , il nous suffit de générer une forme et d’ajouter le paramètre qui donne le son désiré.
la forme modifié du son ou formé avec le son e modifié est dessous

et ghex donne

En d’autres mots, il nous suffit d’écrire 50 ondes pour obtenir le son « ou »

Je dois encore apprendre à manipuler les classes et les fonctions en c++, mais en utilisant l’adressage, j’arrive à générer le son o
les travaux en cours sont ici
cordialement

Je ne sais toujours pas manipuler les classes en c++, mais j’ai l’outil qui va me permettre de présenter les lois physique en acoustique et de démontrer par la même que les celtes avaient construit leur alphabet sur les lois physiques. En attendant que j’affine pour pouvoir présenter voici le code qui permet de créer les voyelles et les consonnes

#include <iostream>
#include <fstream>
#include <vector>
#include <array>
#include <bits/stdc++.h>

typedef unsigned char uchar;
/**pour compiler g++ 'main.cpp'   -std=c++11 -Wall -Wextra -o 'executable' ********************/

int repet1;
int repet;
int ba1;
int ba2;

void bascule1(int ba1,int ba2,int ba3,int ba4,int ba5,int ba6,int ba7,int ba8,int ba9,int ba10,int ba11,int ba12,int ba13,int ba14,int ba15,int ba16,int ba17,int ba18,int ba19,int ba20,int ba21,int ba22,int ba23,int ba24,int ba25,int ba26,int ba27,int ba28,int ba29,int ba30,int ba31,int ba32,int ba33,int ba34,int ba35,int ba36,int ba37,int ba38,int ba39,int ba40,int ba41,int ba42,int ba43,int ba44,int ba45,int ba46,int ba47,int ba48,int ba49,int ba50,int ba51,int ba52,int ba53,int ba54,int ba55,int ba56,int ba57,int ba58,int ba59,int ba60,int ba61,int ba62,int ba63,int ba64,int ba65,int ba66,int ba67,int ba68,int ba69,int ba70,int ba71,int ba72,int ba73,int ba74,int ba75,int ba76,int ba77,int ba78,int ba79,int ba80,int ba81,int ba82,int ba83,int ba84,int ba85,int ba86,int ba87,int ba88,int ba89,int ba90,int ba91,int ba92,int ba93,int ba94,int ba95,int ba96,int ba97,int ba98,int ba99,int ba100,int ba101,int ba102,int ba103,int ba104,int ba105,int ba106,int ba107,int ba108,int ba109,int ba110,int ba111,int ba112,int ba113,int ba114,int ba115,int ba116,int ba117,int ba118,int ba119,int ba120,int ba121,int ba122,int ba123,int ba124,int ba125,int ba126,int ba127,int ba128,int ba129,int ba130,int ba131,int ba132,int ba133,int ba134,int ba135,int ba136,int ba137,int ba138,int ba139,int ba140,int ba141,int ba142,int ba143,int ba144,int ba145,int ba146,int ba147,int ba148,int ba149,int ba150,int ba151,int ba152,int ba153,int ba154,int ba155,int ba156,int ba157,int ba158,int ba159,int ba160,int ba161,int ba162,int ba163,int ba164,int ba165,int ba166,int ba167,int ba168,int ba169,int ba170,int ba171,int ba172,int ba173,int ba174,int ba175,int ba176,int ba177,int ba178,int ba179,int ba180,int ba181,int ba182,int ba183,int ba184,int ba185,int ba186,int ba187,int ba188,int ba189,int ba190,int ba191,int ba192,int ba193,int ba194,int ba195,int ba196,int ba197,int ba198,int ba199,int ba200,int ba201,int ba202,int ba203,int ba204,int ba205,int ba206,int ba207,int ba208,int ba209,int ba210,int ba211,int ba212,int ba213,int ba214,int ba215,int ba216,int ba217,int ba218,int ba219,int ba220,int ba221,int ba222,int ba223,int ba224,int ba225,int ba226,int ba227,int ba228,int ba229,int ba230,int ba231,int ba232,int ba233,int ba234,int ba235,int ba236,int ba237,int ba238,int ba239,int ba240,int ba241,int ba242,int ba243,int ba244,int ba245,int ba246,int ba247,int ba248,int ba249,int ba250,int ba251,int ba252,int ba253,int ba254,int ba255,int ba256,int ba257,int ba258,int ba259,int ba260,int ba261,int ba262,int ba263,int ba264,int ba265){
unsigned char tabn[244] = {0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7,0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF,0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF};

int taba1[69]= {ba1,ba5,ba9,ba13,ba17,ba21,ba25,ba29,ba33,ba37,ba41,ba45,ba49,ba53,ba57,ba61,ba65,ba69,ba73,ba77,ba81,ba85,ba89,ba93,ba97,ba101,ba105,ba109,ba113,ba117,ba121,ba125,ba129,ba133,ba137,ba141,ba145,ba149,ba153,ba157,ba161,ba165,ba169,ba173,ba177,ba181,ba185,ba189,ba193,ba197,ba201,ba205,ba209,ba213,ba217,ba221,ba225,ba229,ba233,ba237,ba241,ba245,ba249,ba253,ba257,ba261,ba265};
int taba2[68]= {ba2,ba6,ba10,ba14,ba18,ba22,ba26,ba30,ba34,ba38,ba42,ba46,ba50,ba54,ba58,ba62,ba66,ba70,ba74,ba78,ba82,ba86,ba90,ba94,ba98,ba102,ba106,ba110,ba114,ba118,ba122,ba126,ba130,ba134,ba138,ba142,ba146,ba150,ba154,ba158,ba162,ba166,ba170,ba174,ba178,ba182,ba186,ba190,ba194,ba198,ba202,ba206,ba210,ba214,ba218,ba222,ba226,ba230,ba234,ba238,ba242,ba246,ba250,ba254,ba258,ba262};
int taba3[68]= {ba3,ba7,ba11,ba15,ba19,ba23,ba27,ba31,ba35,ba39,ba43,ba47,ba51,ba55,ba59,ba63,ba67,ba71,ba75,ba79,ba83,ba87,ba91,ba95,ba99,ba103,ba107,ba111,ba115,ba119,ba123,ba127,ba131,ba135,ba139,ba143,ba147,ba151,ba155,ba159,ba163,ba167,ba171,ba175,ba179,ba183,ba187,ba191,ba195,ba199,ba203,ba207,ba211,ba215,ba219,ba223,ba227,ba231,ba235,ba239,ba243,ba247,ba251,ba255,ba259,ba263};
int taba4[68]= {ba4,ba8,ba12,ba16,ba20,ba24,ba28,ba32,ba36,ba40,ba44,ba48,ba52,ba56,ba60,ba64,ba68,ba72,ba76,ba80,ba84,ba88,ba92,ba96,ba100,ba104,ba108,ba112,ba116,ba120,ba124,ba128,ba132,ba136,ba140,ba144,ba148,ba152,ba156,ba160,ba164,ba168,ba172,ba176,ba180,ba184,ba188,ba192,ba196,ba200,ba204,ba208,ba212,ba216,ba220,ba224,ba228,ba232,ba236,ba240,ba244,ba248,ba252,ba256,ba260,ba264};
int taba5[68]= {ba5,ba9,ba13,ba17,ba21,ba25,ba29,ba33,ba37,ba41,ba45,ba49,ba53,ba57,ba61,ba65,ba69,ba73,ba77,ba81,ba85,ba89,ba93,ba97,ba101,ba105,ba109,ba113,ba117,ba121,ba125,ba129,ba133,ba137,ba141,ba145,ba149,ba153,ba157,ba161,ba165,ba169,ba173,ba177,ba181,ba185,ba189,ba193,ba197,ba201,ba205,ba209,ba213,ba217,ba221,ba225,ba229,ba233,ba237,ba241,ba245,ba249,ba253,ba257,ba261,ba265};

std::vector<std::vector<uchar>> tab = {
	{0x0052,0x0049,0x0046,0x0046,0x001C,0x0032,0x0000,0x0000,0x0057,0x0041,0x0056,0x0045,0x0066,0x006D,0x0074,0x0020,0x0010,0x0000,0x0000,0x0000,0x0001,0x0000,0x0001,0x0000,0x0044,0x00AC,0x0000,0x0000,0x0044,0x00AC,0x0000,0x0000,0x0001,0x0000,0x0008,0x0000,0x0064,0x0061,0x0074,0x0061,0x00F8,0x0031,0x0000,0x0000}};

std::ofstream f ("son-o.wav", std::ios::binary);
	if(!f) {
		std::cerr << "Impossible d'ouvrir le fichier en écriture !" << std::endl;
		//return 1;
	}
	
	
	// entete fichier audio
	for(std::vector<uchar> v : tab) {
		for(uchar c : v) {
			f << c;
		}
	}
	

 
          for (int i=0; i<66; i++)
          {

	    for (repet1 = (taba1[i]); repet1 < (taba1[i]+2); repet1++) { for (repet = 0; repet < 2; repet++) { f<<tabn[repet1]; } }
  	    for (repet1 = (taba1[i]+2); repet1 < (taba2[i]-8); repet1++) { f<<tabn[repet1];repet1++;repet1++;repet1++; }
  	    for (repet1 = (taba2[i]-8); repet1 < (taba2[i]-2); repet1++) { f<<tabn[repet1]; }
  	    for (repet1 = (taba2[i]-2); repet1 < (taba2[i]); repet1++) { for (repet = 0; repet < 2; repet++) { f<<tabn[repet1]; } }  
  	    repet1 = taba2[i]; for (repet = 0; repet < taba3[i]; repet++){ f<<tabn[repet1]; }
 // fin monte 
	    
	    
	    for (repet1 = (taba2[i]-1); repet1 > (taba2[i]-3); repet1--) { for (repet = 0; repet < 2; repet++) { f<<tabn[repet1]; } }
      	    for (repet1 = (taba2[i]-3); repet1 > (taba5[i]+8); repet1--) { f<<tabn[repet1];repet1--;repet1--;repet1--; }
  	    for (repet1 = (taba5[i]+8); repet1 > (taba5[i]+2); repet1--) { f<<tabn[repet1]; }
  	    for (repet1 = (taba5[i]+2); repet1 > (taba5[i]); repet1--) { for (repet = 0; repet < 2; repet++) { f<<tabn[repet1]; } } 
  	    repet1 = taba5[i]; for (repet = 0; repet < taba4[i]; repet++){ f<<tabn[repet1]; }
//  	    for (repet = 0; repet < taba4[i]; repet++) { f<<taba5[i];  } // fin descend 

 }
 /**********************************************************/
 	//tab de zone blanche
std::vector<std::vector<uchar>> tab3 = {
	{0x0080}};
 // 1 tab de zone blanche de fin
	repet = 0;
	for (repet = 0; repet < 180; repet++) {
	
		for(std::vector<uchar> v : tab3) {
		for(uchar c : v) {
			f << c;
		}
	}
	}
	
	//2

}




int main (void)
{


          bascule1(110,137,6,2,118,140,8,4,118,143,4,4,86,146,4,4,90,152,2,5,97,159,4,2,44,164,4,4,50,176,2,5,64,189,4,2,113,176,3,3,157,201,2,2,21,225,2,2,91,189,2,2,114,225,2,2,4,225,2,2,72,146,2,2, 80,176,2,2,113,225,2,3,4,225,2,2,72,146,2,2,80,176,2,2,113,225,2,3,4,225,2,2,72,146,2,2,80,176,2,2,113,225,2,3,74,225,2,2,72,146,2,2,80,176,2,2,113,225,2,3,4,225,2,2,72,146,2,2,80,176,2,2,113,225,2,3,4,225,2,2,72,146,2,2,80,176,2,2,113,225,2,3,80,187,2,2,113,223,2,3,6,229,2,3,69,189,2,3,112,216,2,2,31,223,2,2,80,115,3,2,110,185,3,2,31,203,3,3,80,212,2,2,71,125,3,2,95,175,3,3,31,182,3,2,45,200,2,2,77,121,3,3,31,166,3,5,134,162,3,3,60,188,7,2,84,159,3,2,31,159,3,3,75,181,5,2,91,157,3,2,85,171,5,12,31,152,3,3,92,165,5,2,102,151,3,5,100,157,3,4,106,150,3,6,128);


	
	return 0;
}

cordialement