J'aurais besoin de deux applications en ligne de commande, les plus
simplistes possibles et avec le moins de dépendances possibles (c'est pour
utiliser sur un serveur).
La première pour générer un fichier avec des tonalités ou des doubles
tonalités (Cf. DTMF) et au format brut de préférence. Au hasard de mes
recherches, je suis tombé sur le source de testsine.c du projet CSL
(j'ignore si c'est connu ou non :-P) mais celui-ci ne permet de ne générer
que des simples tonalités.
L'autre pour générer un fichier audio dont le canal 1 serait issu d'un
premier fichier et dont le canal 2 serait issu d'un deuxième fichier. Le
couteau suisse qu'est Sox, ne permet malheureusement pas de faire cette
tâche.
On Mon, 4 Dec 2006 20:06:45 +0100, Sébastien Monbrun aka TiChou :
La première pour générer un fichier avec des tonalités ou des doubles tonalités (Cf. DTMF) et au format brut de préférence.
Si tu as la table des fréquences, ça doit être simple à faire soi-même, non ?
Je me demande même si ça ne serait pas programmable en bash.
L'autre pour générer un fichier audio dont le canal 1 serait issu d'un premier fichier et dont le canal 2 serait issu d'un deuxième fichier.
Là encore, c'est assez simple à faire, surtout si tu veux un format raw (brut) : il suffit de prendre deux octets dans le premier fichier, les écrire, puis prendre deux octets dans le second, etc.
Enfin bref, si tu ne sais pas faire ça toi-même, et que tu ne trouves pas ton bonheur, donne-moi un peu plus de précisions et je te ponds ça en C++ ou en PHP.
On Mon, 4 Dec 2006 20:06:45 +0100, Sébastien Monbrun aka TiChou
<gro.uohcit@uohcit>:
La première pour générer un fichier avec des tonalités ou des doubles
tonalités (Cf. DTMF) et au format brut de préférence.
Si tu as la table des fréquences, ça doit être simple à faire
soi-même, non ?
Je me demande même si ça ne serait pas programmable en bash.
L'autre pour générer un fichier audio dont le canal 1 serait issu d'un
premier fichier et dont le canal 2 serait issu d'un deuxième fichier.
Là encore, c'est assez simple à faire, surtout si tu veux un format
raw (brut) : il suffit de prendre deux octets dans le premier fichier,
les écrire, puis prendre deux octets dans le second, etc.
Enfin bref, si tu ne sais pas faire ça toi-même, et que tu ne trouves
pas ton bonheur, donne-moi un peu plus de précisions et je te ponds ça
en C++ ou en PHP.
On Mon, 4 Dec 2006 20:06:45 +0100, Sébastien Monbrun aka TiChou :
La première pour générer un fichier avec des tonalités ou des doubles tonalités (Cf. DTMF) et au format brut de préférence.
Si tu as la table des fréquences, ça doit être simple à faire soi-même, non ?
Je me demande même si ça ne serait pas programmable en bash.
L'autre pour générer un fichier audio dont le canal 1 serait issu d'un premier fichier et dont le canal 2 serait issu d'un deuxième fichier.
Là encore, c'est assez simple à faire, surtout si tu veux un format raw (brut) : il suffit de prendre deux octets dans le premier fichier, les écrire, puis prendre deux octets dans le second, etc.
Enfin bref, si tu ne sais pas faire ça toi-même, et que tu ne trouves pas ton bonheur, donne-moi un peu plus de précisions et je te ponds ça en C++ ou en PHP.
Sébastien Monbrun aka TiChou
Dans le message <news:, *Fabien LE LEZ* tapota sur f.c.o.l.configuration :
La première pour générer un fichier avec des tonalités ou des doubles tonalités (Cf. DTMF) et au format brut de préférence.
Si tu as la table des fréquences, ça doit être simple à faire soi-même, non ?
Les fréquences ne se limiteraient pas à celles utilisées en DTMF. C'était un exemple. Ça pourrait très bien être des fréquences plus arbitraires que celles là.
Je me demande même si ça ne serait pas programmable en bash.
Je ne sais pas comment numériquement on génère ça. Et quid du volume ?
L'autre pour générer un fichier audio dont le canal 1 serait issu d'un premier fichier et dont le canal 2 serait issu d'un deuxième fichier.
Là encore, c'est assez simple à faire, surtout si tu veux un format raw (brut) : il suffit de prendre deux octets dans le premier fichier, les écrire, puis prendre deux octets dans le second, etc.
Oui, tout bêtement... Pourquoi n'y ai-je pas pensé ?
Enfin bref, si tu ne sais pas faire ça toi-même, et que tu ne trouves pas ton bonheur, donne-moi un peu plus de précisions et je te ponds ça en C++ ou en PHP.
Pour la première application, je n'ai encore rien trouvé et je ne saurais le faire. Pour la deuxième application, je vais faire ça en perl.
D'ailleurs, à y réfléchir, il ne serait pas étonnant que je trouve un module perl sachant faire ce que je recherche.
Je continue mes recherches.
-- Sébastien Monbrun aka TiChou
Dans le message <news:g7u8n21na4u957p44sks37htmqsd88mf8m@4ax.com>,
*Fabien LE LEZ* tapota sur f.c.o.l.configuration :
La première pour générer un fichier avec des tonalités ou des doubles
tonalités (Cf. DTMF) et au format brut de préférence.
Si tu as la table des fréquences, ça doit être simple à faire
soi-même, non ?
Les fréquences ne se limiteraient pas à celles utilisées en DTMF. C'était un
exemple. Ça pourrait très bien être des fréquences plus arbitraires que
celles là.
Je me demande même si ça ne serait pas programmable en bash.
Je ne sais pas comment numériquement on génère ça. Et quid du volume ?
L'autre pour générer un fichier audio dont le canal 1 serait issu d'un
premier fichier et dont le canal 2 serait issu d'un deuxième fichier.
Là encore, c'est assez simple à faire, surtout si tu veux un format
raw (brut) : il suffit de prendre deux octets dans le premier fichier,
les écrire, puis prendre deux octets dans le second, etc.
Oui, tout bêtement... Pourquoi n'y ai-je pas pensé ?
Enfin bref, si tu ne sais pas faire ça toi-même, et que tu ne trouves
pas ton bonheur, donne-moi un peu plus de précisions et je te ponds ça
en C++ ou en PHP.
Pour la première application, je n'ai encore rien trouvé et je ne saurais le
faire. Pour la deuxième application, je vais faire ça en perl.
D'ailleurs, à y réfléchir, il ne serait pas étonnant que je trouve un module
perl sachant faire ce que je recherche.
Dans le message <news:, *Fabien LE LEZ* tapota sur f.c.o.l.configuration :
La première pour générer un fichier avec des tonalités ou des doubles tonalités (Cf. DTMF) et au format brut de préférence.
Si tu as la table des fréquences, ça doit être simple à faire soi-même, non ?
Les fréquences ne se limiteraient pas à celles utilisées en DTMF. C'était un exemple. Ça pourrait très bien être des fréquences plus arbitraires que celles là.
Je me demande même si ça ne serait pas programmable en bash.
Je ne sais pas comment numériquement on génère ça. Et quid du volume ?
L'autre pour générer un fichier audio dont le canal 1 serait issu d'un premier fichier et dont le canal 2 serait issu d'un deuxième fichier.
Là encore, c'est assez simple à faire, surtout si tu veux un format raw (brut) : il suffit de prendre deux octets dans le premier fichier, les écrire, puis prendre deux octets dans le second, etc.
Oui, tout bêtement... Pourquoi n'y ai-je pas pensé ?
Enfin bref, si tu ne sais pas faire ça toi-même, et que tu ne trouves pas ton bonheur, donne-moi un peu plus de précisions et je te ponds ça en C++ ou en PHP.
Pour la première application, je n'ai encore rien trouvé et je ne saurais le faire. Pour la deuxième application, je vais faire ça en perl.
D'ailleurs, à y réfléchir, il ne serait pas étonnant que je trouve un module perl sachant faire ce que je recherche.
Je continue mes recherches.
-- Sébastien Monbrun aka TiChou
Fabien LE LEZ
On Mon, 4 Dec 2006 21:31:13 +0100, Sébastien Monbrun aka TiChou :
Je me demande même si ça ne serait pas programmable en bash.
Je ne sais pas comment numériquement on génère ça. Et quid du volume ?
Soit A l'amplitude (typiquement, 32767 en 16 bits). Soit E la fréquence d'échantillonnage en Hz (44100 généralement). Soient f_1, ..., f_n les fréquences à générer. On suppose que chaque f_i est franchement inférieur à E/2.
Soient A_1, ..., A_n les amplitudes correspondantes. Si tous les signaux ont la même amplitude, A_1 = ... = A_n = A/n.
Pour le signal numéro i, une longueur d'onde, soit 2*Pi radians, correspond à E/f_i échantillons. Donc, un radian correspond à E/(f_i*2*Pi) échantillons. Inversons : un échantillon correspond à omega_i = (f_i*2*Pi)/E radians.
La valeur du signal pour l'échantillon numéro j est donc :
A_i * sin ( j * omega_i )
Si tu ne te préoccupes pas de décalage de phase, la valeur totale du signal (i.e. la valeur à enregistrer dans ton fichier) est :
Somme pour i allant de 1 à n de A_i * sin ( j * omega_i )
Bien sûr, j varie de 0 à E * la durée voulue.
Pour éviter un "cloc" sonore à la fin, tu fais retourner le signal à 0 progressivement. Ainsi, si la dernière valeur calculée est -25610, tu rajoutes derrière les valeurs -23049, -20488, -17927, -15366, -12805, -10244, -7683, -5122, -2561 et 0 (par exemple).
On Mon, 4 Dec 2006 21:31:13 +0100, Sébastien Monbrun aka TiChou :
Je me demande même si ça ne serait pas programmable en bash.
Je ne sais pas comment numériquement on génère ça. Et quid du volume ?
Soit A l'amplitude (typiquement, 32767 en 16 bits).
Soit E la fréquence d'échantillonnage en Hz (44100 généralement).
Soient f_1, ..., f_n les fréquences à générer. On suppose que chaque
f_i est franchement inférieur à E/2.
Soient A_1, ..., A_n les amplitudes correspondantes. Si tous les
signaux ont la même amplitude, A_1 = ... = A_n = A/n.
Pour le signal numéro i, une longueur d'onde, soit 2*Pi radians,
correspond à E/f_i échantillons.
Donc, un radian correspond à E/(f_i*2*Pi) échantillons.
Inversons : un échantillon correspond à
omega_i = (f_i*2*Pi)/E radians.
La valeur du signal pour l'échantillon numéro j est donc :
A_i * sin ( j * omega_i )
Si tu ne te préoccupes pas de décalage de phase, la valeur totale du
signal (i.e. la valeur à enregistrer dans ton fichier) est :
Somme pour i allant de 1 à n de
A_i * sin ( j * omega_i )
Bien sûr, j varie de 0 à E * la durée voulue.
Pour éviter un "cloc" sonore à la fin, tu fais retourner le signal à 0
progressivement.
Ainsi, si la dernière valeur calculée est -25610, tu rajoutes derrière
les valeurs -23049, -20488, -17927, -15366, -12805, -10244, -7683,
-5122, -2561 et 0 (par exemple).
On Mon, 4 Dec 2006 21:31:13 +0100, Sébastien Monbrun aka TiChou :
Je me demande même si ça ne serait pas programmable en bash.
Je ne sais pas comment numériquement on génère ça. Et quid du volume ?
Soit A l'amplitude (typiquement, 32767 en 16 bits). Soit E la fréquence d'échantillonnage en Hz (44100 généralement). Soient f_1, ..., f_n les fréquences à générer. On suppose que chaque f_i est franchement inférieur à E/2.
Soient A_1, ..., A_n les amplitudes correspondantes. Si tous les signaux ont la même amplitude, A_1 = ... = A_n = A/n.
Pour le signal numéro i, une longueur d'onde, soit 2*Pi radians, correspond à E/f_i échantillons. Donc, un radian correspond à E/(f_i*2*Pi) échantillons. Inversons : un échantillon correspond à omega_i = (f_i*2*Pi)/E radians.
La valeur du signal pour l'échantillon numéro j est donc :
A_i * sin ( j * omega_i )
Si tu ne te préoccupes pas de décalage de phase, la valeur totale du signal (i.e. la valeur à enregistrer dans ton fichier) est :
Somme pour i allant de 1 à n de A_i * sin ( j * omega_i )
Bien sûr, j varie de 0 à E * la durée voulue.
Pour éviter un "cloc" sonore à la fin, tu fais retourner le signal à 0 progressivement. Ainsi, si la dernière valeur calculée est -25610, tu rajoutes derrière les valeurs -23049, -20488, -17927, -15366, -12805, -10244, -7683, -5122, -2561 et 0 (par exemple).
Nicolas George
Sébastien Monbrun aka TiChou wrote in message :
J'aurais besoin de deux applications en ligne de commande, les plus simplistes possibles et avec le moins de dépendances possibles (c'est pour utiliser sur un serveur). <snip>
sox n'est pas complètement minimaliste, mais j'imagine qu'il doit pouvoir se compiler avec relativement peu de bibliothèques tout en gérant encore ce que tu veux.
Sébastien Monbrun aka TiChou wrote in message
<bzium.20061204195524@florizarre.tichou.org>:
J'aurais besoin de deux applications en ligne de commande, les plus
simplistes possibles et avec le moins de dépendances possibles (c'est pour
utiliser sur un serveur).
<snip>
sox n'est pas complètement minimaliste, mais j'imagine qu'il doit pouvoir se
compiler avec relativement peu de bibliothèques tout en gérant encore ce que
tu veux.
J'aurais besoin de deux applications en ligne de commande, les plus simplistes possibles et avec le moins de dépendances possibles (c'est pour utiliser sur un serveur). <snip>
sox n'est pas complètement minimaliste, mais j'imagine qu'il doit pouvoir se compiler avec relativement peu de bibliothèques tout en gérant encore ce que tu veux.
Sébastien Monbrun aka TiChou
Dans le message <news:, *Fabien LE LEZ* tapota sur f.c.o.l.configuration :
Je me demande même si ça ne serait pas programmable en bash.
Je ne sais pas comment numériquement on génère ça. Et quid du volume ?
[théorie]
Ok sur la théorie et le principe, mais je me vois mal mettre ça en application, ça va me prendre trop de temps. :-)
-- Sébastien Monbrun aka TiChou
Dans le message <news:6e49n2pv0ob46qclhap32srnkjoaus3sbu@4ax.com>,
*Fabien LE LEZ* tapota sur f.c.o.l.configuration :
Je me demande même si ça ne serait pas programmable en bash.
Je ne sais pas comment numériquement on génère ça. Et quid du volume ?
[théorie]
Ok sur la théorie et le principe, mais je me vois mal mettre ça en
application, ça va me prendre trop de temps. :-)
Dans le message <news:, *Fabien LE LEZ* tapota sur f.c.o.l.configuration :
Je me demande même si ça ne serait pas programmable en bash.
Je ne sais pas comment numériquement on génère ça. Et quid du volume ?
[théorie]
Ok sur la théorie et le principe, mais je me vois mal mettre ça en application, ça va me prendre trop de temps. :-)
-- Sébastien Monbrun aka TiChou
Sébastien Monbrun aka TiChou
Dans le message <news:45749413$0$7958$, *Nicolas George* tapota sur f.c.o.l.configuration :
sox n'est pas complètement minimaliste, mais j'imagine qu'il doit pouvoir se compiler avec relativement peu de bibliothèques tout en gérant encore ce que tu veux.
Il est déjà installé et compilé avec le strict minimum dont j'ai besoin. Mais SoX ne permet pas de faire ce que je veux.
-- Sébastien Monbrun aka TiChou
Dans le message <news:45749413$0$7958$426a34cc@news.free.fr>,
*Nicolas George* tapota sur f.c.o.l.configuration :
sox n'est pas complètement minimaliste, mais j'imagine qu'il doit pouvoir
se compiler avec relativement peu de bibliothèques tout en gérant encore
ce que tu veux.
Il est déjà installé et compilé avec le strict minimum dont j'ai besoin.
Mais SoX ne permet pas de faire ce que je veux.
Dans le message <news:45749413$0$7958$, *Nicolas George* tapota sur f.c.o.l.configuration :
sox n'est pas complètement minimaliste, mais j'imagine qu'il doit pouvoir se compiler avec relativement peu de bibliothèques tout en gérant encore ce que tu veux.
Il est déjà installé et compilé avec le strict minimum dont j'ai besoin. Mais SoX ne permet pas de faire ce que je veux.
-- Sébastien Monbrun aka TiChou
Fabien LE LEZ
On Mon, 4 Dec 2006 22:50:18 +0100, Sébastien Monbrun aka TiChou :
Ok sur la théorie et le principe, mais je me vois mal mettre ça en application
Tiens ? J'aurais juré qu'il était facile de faire ça en à peu près n'importe quel langage.
int j_max= duree_en_secondes * echantillonnage; short valeur= 0; for (int j=0; j < j_max; ++j) { valeur= amplitude * sin (omega1 * j) + amplitude * sin (omega2 * j); EnregistrerValeur (dest, valeur); }
// La suite est optionnelle int duree_fade_out= 10; for (int j=1; j<=duree_fade_out; ++j) { EnregistrerValeur (dest, valeur * (duree_fade_out-j) / duree_fade_out); } }
int j_max= duree_en_secondes * echantillonnage;
short valeur= 0;
for (int j=0; j < j_max; ++j)
{
valeur= amplitude * sin (omega1 * j)
+ amplitude * sin (omega2 * j);
EnregistrerValeur (dest, valeur);
}
// La suite est optionnelle
int duree_fade_out= 10;
for (int j=1; j<=duree_fade_out; ++j)
{
EnregistrerValeur (dest, valeur * (duree_fade_out-j)
/ duree_fade_out);
}
}
int j_max= duree_en_secondes * echantillonnage; short valeur= 0; for (int j=0; j < j_max; ++j) { valeur= amplitude * sin (omega1 * j) + amplitude * sin (omega2 * j); EnregistrerValeur (dest, valeur); }
// La suite est optionnelle int duree_fade_out= 10; for (int j=1; j<=duree_fade_out; ++j) { EnregistrerValeur (dest, valeur * (duree_fade_out-j) / duree_fade_out); } }