IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

[2.2.4] Impossible de faire fonctionner winapi.inc (concerne GetSystemMetrics)


Sujet :

Lazarus Pascal

  1. #121
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Pour l'enregistrement, au niveau du code ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      ...... 
      channel:= BASS_StreamCreate(sampleRate, 2, BASS_SAMPLE_FLOAT, @WaveformProc, nil);  //inchangé
      BASS_Encode_Start(channel, 'output.wav', BASS_ENCODE_PCM, nil, nil);  // on ajoute cette ligne qui utilise la bibliothèque BASSENC
      BASS_ChannelPlay(channel, false);   // Inchangé
    Ensuite tu prévois d'arrêter l'enregistrement où et quand tu le souhaites (timer, bouton, etc):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BASS_Encode_Stop(Channel);
    Et voici ce que ça donne :

    Nom : signal_stereo.jpg
Affichages : 145
Taille : 25,4 Ko

    bb84000

  2. #122
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Re,


    Ah ouais, ça a l'air pas mal, ça !

    Juste un bémol : ça oblige à installer un complément à BASS, faut que j'y réfléchisse, parce que, mine de rien, ça ne devrait pas être si compliqué que ça d'enregistrer dans un Stream les données une fois calculées, non ?
    Mais ça, je n'y arrive pas...

    Je vais étudier intensément et profondément ce lien, qui parle d'encodage vers WMA et dans mon esprit, il y a sans doute moyen de faire la même chose pour WAV.
    Mais je n'ai pas encore trouvé, malgré la remarque intéressante de Ian.

    Et faut que je bouge, là (rdv toubib).
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #123
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Citation Envoyé par Jipété Voir le message
    Juste un bémol : ça oblige à installer un complément à BASS, faut que j'y réfléchisse, parce que, mine de rien, ça ne devrait pas être si compliqué que ça d'enregistrer dans un Stream les données une fois calculées, non ?
    Mais ça, je n'y arrive pas...

    Je vais étudier intensément et profondément ce lien, qui parle d'encodage vers WMA et dans mon esprit, il y a sans doute moyen de faire la même chose pour WAV.
    Mais je n'ai pas encore trouvé, malgré la remarque intéressante de Ian..
    Effectivement, il faut utiliser BASSENC, qui est une extension à BASS pour obtenir un WAV PCM.

    Sur le papier, il est possible de créer "à la main" un fichier WAV à partir des échantillons qui servent à créer la sinusoïde. Il y a une bonne explication sur Wikipedia. Je doute que ce soit "pas très compliqué"...

    bb84000

  4. #124
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    a priori rien d'insurmontable quand je lit ceci


    PS un petit projet de mixer ici
    bon amusement
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  5. #125
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Bonsoir les copains,

    je suis vraiment désolé mais cette saleté de cochonnerie de Lazarus n'étant pas fichue de reconnaitre les librairies dans le chemin standard où elles sont stockées et malgré le forçage du chemin dans les "options du projet", il m'est du coup impossible de compiler le rectest trouvé dans le zip de bassenc.
    J'ai tout fouillé partout, tout est bon et nettoyé et malgré ça,
    Nom : erreur2compil.png
Affichages : 131
Taille : 14,6 Ko

    Merci pour ton premier lien, anapurna, il est propre et bien écrit, dommage pour ceux qui le liront que le code ne soit pas complet. Mais ça n'est pas bien grave, on peut y arriver quand même.
    Quant au second lien, on peut lire, un peu plus bas sur la page,
    Citation Envoyé par page_internet
    la lib BASS (de mémoire mais je pense) dans ce zip est une ancienne version, je te conseille de télécharger la dernière version à cette adresse " www.un4seen.com ".

    Certaines fonctions utilisées dans ce programme n'existent plus dans la nouvelle version (la syntaxe a un peu changé)
    et pas trop envie de me prendre encore plus la tête.
    Voili voilà...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #126
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour Jipété !

    Comme tu es sous Linux, il faut naturellement les bibliothèques libbass.so et libbassenc.so installés dans les répertoires qui vont bien. Et pour être certain d'avoir les bonnes unités pour les charger, je ne peux que te conseiller celles que j'ai écrites pour un chargement dynamique lazd_bass et lazd_bassenc , où l'identificateur bassdll désigne la bibliothèque correcte en fonction de l'OS (grâce à $IFDEF Cible . Seule contrainte, il faut la charger au début du programme et la décharger à la fin. Disponible gratuitement et librement (voir signature.)

    bb84000

  7. #127
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Bonjour Bernard et les autres lecteurs,

    merci de ton soutien mais comme je suis un vieux de la vieille, je sais où se trouvent les librairies dans ma machine, et jusqu'à hier je n'avais aucun problème avec Bass et son unique .so dans le dossier qui va bien (/usr/lib/).
    C'est en y rajoutant la lib pour bassenc que c'est parti en sucette...

    Citation Envoyé par bb84000 Voir le message
    [...] l'identificateur bassdll désigne la bibliothèque correcte en fonction de l'OS (grâce à $IFDEF Cible . Seule contrainte, il faut la charger au début du programme et la décharger à la fin. Disponible gratuitement et librement (voir signature.)
    Je ne suis pas allé voir dans ta signature, ce qui me surprend c'est ce que tu écris car c'est déjà présent dans bass.pas, presque à la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    // Functions
    const
    {$IFDEF MSWINDOWS}
      bassdll = 'bass.dll';
    {$ENDIF}
    {$IFDEF LINUX}
      bassdll = 'libbass.so';
    {$ENDIF}
    {$IFDEF ANDROID}
      bassdll = 'libbass.so';
    {$ENDIF}
    {$IFDEF MACOS}
      {$IFDEF IOS}
        bassdll = 'libbass.a';
      {$ELSE}
        bassdll = 'libbass.dylib';
      {$ENDIF}
    {$ENDIF}
    Par contre, il n'y avait qu'une ligne pour la dll dans bassenc.pas, j'en ai rajouté une pour le .so suivant le schéma ci-dessus mais ça n'a rien changé.


    Ce matin à la fraiche j'ai récupéré les sources de l'exemple Delphi/rectest, les ai recopiées ailleurs, Maj-F9 et ça a compilé sans souci (pas encore viré le bassenc.so). Mais ce programme n'a pas besoin de bassenc, à ne pas confondre avec le rectest qui vient dans le zip de bassenc !
    Un mystère de plus, donc.

    Maintenant, mon idée était de partir de ce rectest mais je découvre avec stupéfaction et désespoir que cet outil n'est pas plus capable de détecter l'entrée Capture (il ne voit pas non plus Alsa dans sa liste de devices), j'en conclus que la librairie Bass n'est pas finie ou pas adaptée à cette machine (ou c'est Debian qui met sa pagaille ou plutôt l'infâme PulseAudio qui fait crier tout le monde sur les forums) qui, en l'état, ne peut pas me rendre le service que j'attendais d'elle.
    Le pire, c'est qu'avec la précédente machine qui m'a vaillamment accompagné de 2013 à 2021, avec un vieux proc Intel et une Debian 7/32 bits, les périphs y étaient correctement détectés, j'ai retrouvé des fichiers de sortie que j'avais conservés.

    Et tout ça est confirmé par le prog devlist écrit en C (un simple "make" dans son dossier et ça roule). Voilà ce que j'ai retrouvé de la vieille machine (extraits) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Output Devices
    4: Playback/recording through the PulseAudio sound server
    	driver: pulse
    	type: Unknown
    	flags: enabled (1)
    Input Devices
    2: Playback/recording through the PulseAudio sound server
    	driver: pulse
    	type: Unknown
    	flags: enabled (1)
    et dans la nouvelle machine (extraits) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Output Devices
    12: PulseAudio Sound Server
    	driver: pulse
    	type: Unknown
    	flags: enabled (1)
    Input Devices
    8: PulseAudio Sound Server
    	driver: pulse
    	type: Unknown
    	flags: enabled (1)
    On notera l'absence des mots "Playback/recording through the" présents dans la première version, et choisir dans l'ihm de rectest l'option PulseAudio Sound Server comme device permet d'enregistrer du... rien.

    Résultat contraint et forcé, j'abandonne et vais me reconcentrer sur un projet présenté par anapurna vers le début de cette discussion, l'idée étant quand même au départ d'essayer d'avoir des bargraphs mathématiquement réalistes.
    Mais pas aujourd'hui ni ce week-end.

    Joyeux Noël à tous et attention les bugs, ils sont en recrudescence, on dirait !
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #128
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour Jipété !

    En ce qui concerne libbassenc.so, j'imagine que tu l'as installée de la même manière que libbass.so, c'est à dire dans le dossier /usr/local/lib avec toutes les autorisations nécessaires.

    De toutes façons, je vais tester tout ça sous Linux Mint quand j'aurai un moment, ainsi que le code pour fabriquer directement le wav à partir de l'exemple rectest.

    bb84000

  9. #129
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour

    Jipété, j'ai trouvé du code pour générer des fichiers wav qui vient de LA.
    Cela n'utilise pas fpWavwriter de FPC que je n'ai pas réussi à utiliser, je bute sur l'écriture du buffer. Par contre, le code dont je mets le zip reprend celui donné dans le lien ci-dessus, avec les modifications suggérées ainsi que des petites améliorations esthétiques de mon cru.

    wavewriter.zip

    Bonnes fêtes !

    bb84000

  10. #130
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Coucou !

    Citation Envoyé par bb84000 Voir le message
    Jipété, j'ai trouvé du code pour générer des fichiers wav qui vient de LA.
    Ah mais c'est rigolo, ça, j'ai apporté mon grain de sel à la fin de cette discussion, lol ! (on en a un peu parlé ici, il me semble)

    Citation Envoyé par bb84000 Voir le message
    Cela n'utilise pas fpWavwriter de FPC que je n'ai pas réussi à utiliser, je bute sur l'écriture du buffer.
    C'est parfois pas très clair, tout ça...


    Citation Envoyé par bb84000 Voir le message
    Par contre, le code dont je mets le zip reprend celui donné dans le lien ci-dessus, avec les modifications suggérées ainsi que des petites améliorations esthétiques de mon cru.
    Et je me suis permis d'en rajouter également, ce qui donne ça :
    Nom : code_bernard.png
Affichages : 126
Taille : 19,5 Ko

    On voit que j'ai rajouté un TPanel sans bordures où j'ai déplacé les deux labels de fréquence et de volume, comme ça le panel masque les ScalePos des trackbars déplacées à droite et j'ai aussi modifié l'amplitude lors de l'enregistrement car chez moi le curseur à 100 % m'enregistrait un niveau à... zéro !
    Ça fait bizarre à l'écoute, quand c'est le 1er test et qu'on a l'impression que ça foire,
    Les plus observateurs remarqueront que ce TPanel rajouté signale sa présence par une couleur un poil plus claire que la form sur laquelle il est posé, c'est comme ça et j'y peux rien, ça s'appelle un bug.
    Et ce que mes yeux ont vu est confirmé par un coup de ColorPicker : la fiche : 237 236 235, le panneau : 242 241 240. Désolé, les gens, car bien sûr l'option ParentColor à True dans le TPanel ne change rien, pas plus que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.FormActivate(Sender: TObject);
    begin
      Panel1.ParentColor := False;
      Panel1.Color := Form1.Color;
    end;
    Qu'est-ce qu'ils nous ont encore cassé ????????????????????
    EDIT : je l'ai eu :
    Nom : changement_couleurs.png
Affichages : 125
Taille : 1,9 Ko
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.FormActivate(Sender: TObject);
    begin
      Panel1.ParentColor := False;
    //Panel1.Color := Form1.Color;
      Panel1.Color := RGBtoColor(237,236,235); // amusant, parce que c'est la couleur de la Form1
    end;
    Enfin, "amusant", j'aurais dû écrire "dramatique", plutôt. /EDIT



    Retournons à nos moutons, j'ai donc fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      try
        freq := FREQUENCIES[Trackbar1.Position];
        channels := Radiogroup1.ItemIndex;
    //  amplitude := (TrackBar2.Max - TrackBar2.Position) / TrackBar2.Max;
        amplitude := TrackBar2.Position / 100;
    Et j'envisage de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    begin
      fn := '/tmp/test_bernard.wav';
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    begin
      fn := LabeledEdit1.Text;
    ça permet d'enregistrer très facilement plusieurs fichiers sans se prendre la tête avec l'obligation de renommer le fichier juste créé après chaque création, et je t'assure que c'est trop bien, genre le TLabeledEdit va afficher /tmp/test_bernard.wav et il suffit de cliquer avant le point et rajouter par exemple M pour mono puis changer le radiogroup et mettre S pour stéréo et voilà tes deux fichiers,


    Une idée : pouvoir entendre le son en direct pendant qu'on le crée/configure/modifie plutôt qu'être obligé d'enregistrer à chaque fois pour écouter ensuite (= laborieux).


    De mon côté, j'ai viré plein de vieux codes morts, faux, buggés, etc., il me reste à vérifier que j'en ai au moins un qui fonctionne en float du début à la fin et ça sera quasiment fini.
    Mais pas aujourd'hui, que je n'arrive pas à réfléchir...

    Une piste pour te simplifier le code : plutôt que d'utiliser les 3 types TWavRiffHeader, TWavFmtSubchunk et TWavDataSubchunk, utilise directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    type   // source : BASS/rectest
      WAVHDR = packed record
        riff: array [0 .. 3] of AnsiChar;
        len: DWord;
        cWavFmt: array [0 .. 7] of AnsiChar;
        dwHdrLen: DWord;
        wFormat: Word;
        wNumChannels: Word;
        dwSampleRate: DWord;
        dwBytesPerSec: DWord;
        wBlockAlign: Word;
        wBitsPerSample: Word;
        cData: array [0 .. 3] of AnsiChar;
        dwDataLen: DWord;
      end;
    et ça fonctionne avec deux boutons (ms c'est un TMemoryStream créé dans FormCreate) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    procedure TForm1.StartRecording;
    var
      BytesRead : Cardinal;
    begin
      if ms.Size > 0 then begin
        // free old recording
        BASS_StreamFree(channel);
        ms.Clear;
      end;
     
      // generate header for WAV file
      with WaveHdr do begin
        riff := 'RIFF';
        len := 36;
        cWavFmt := 'WAVEfmt ';
        dwHdrLen := 16;
        wFormat := 1;
        wNumChannels := 2;
        dwSampleRate := 44100;
        wBlockAlign := 4;
        dwBytesPerSec := 176400;
        wBitsPerSample := 16;
        cData := 'data';
        dwDataLen := 0;
      end;
     
      ms.Write(WaveHdr, SizeOf(WAVHDR));
    end;
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    procedure TForm1.StopRecording; // complete the WAV header
    var
      i: integer;
    begin
      BASS_ChannelStop(channel);
      channel := 0;
      //bRecord.Caption := 'Record';-- jp : lire + bas
     
      // complete the WAV header
      ms.Position := 4;
      i := ms.Size - 8;
      ms.Write(i, 4);
      i := i - $24;
      ms.Position := 40;
      ms.Write(i, 4);
      ms.Position := 0;
      // create a stream from the recorded data
      channel := BASS_StreamCreateFile(True, ms.Memory, 0, ms.Size, 0);
      if channel <> 0 then begin
        // enable "Play" & "Save" buttons
        //bPlay.Enabled := True;-- jp: je n'ai pas de bouton "bPlay" ni "bRecord", j'en ai un play/stop dont la caption bascule en fonction du clic.
        btnSaveFile.Enabled := True;
      end
      else
        MessageDlg('Error creating stream from recorded data!', mtError, [mbOk], 0);
    end;
    et après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.btnSaveFileClick(Sender: TObject); // SAVE FILE
    begin
      ms.SaveToFile(ledFName.Text);
    end;
    1 ligne de code !
    Elle est pas belle la vie ?


    Autre chose, que je viens de découvrir à l'instant (et je l'oublie tout le temps), à propos de mon chargement de librairies à la ramasse :
    Citation Envoyé par forum.lazarus.freepascal
    If you download it yourself, you should copy it there (as a "sudo") and then run "sudo ldconfig" in console - system will rescan dyn. libraries.
    source = https://forum.lazarus.freepascal.org...html#msg112435
    Discussion à voir, pour les curieux.

    Citation Envoyé par bb84000 Voir le message
    Bonnes fêtes !
    Tout pareil !
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  11. #131
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour Jipété !

    Je m'étais contenté de recopier le code et de reconstituer quelques trucs (parce qu'il n'y avait pas de .lfm), en plus le type, il utilisait une scrollbar pour le volume... Enfin on ne va pas râler, son code marche. Tu as vraiment fignolé le bazar.

    J'aurai bien voulu utiliser le TWavvriter natif de FPC, dans le code du "générateur" mais je n'y arrive pas. Il y a une histoire de buffer qui "exceptionne". Ça attendra quelques jours.

    En ce qui concerne les bibliothèques sous Linux (Ubuntu et ses dérivés, pour Debian, peut-être que le répertoire est différent), j'ai bricolé un script (je ne suis pas suffisamment familier avec Linux, mais il y a peut-être moyen de trouver le répertoire qui va bien dans une variable d'environnement):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #!/bin/sh
     
    # bool function to test if the user is root or not (POSIX only)
    is_user_root ()
    {
        [ "$(id -u)" -eq 0 ]
    }
     
    if is_user_root; then
        echo 'Installing BASS shared libraries'
        # You can do whatever you need...
        cp libbass.so /usr/local/lib
        cp libbassenc.so /usr/local/lib
        chmod a+rx /usr/local/lib/libbass.so
        chmod a+rx /usr/local/lib/libbassenc.so
        ldconfig
        echo 'Shared BASS libraries installed' 
    else
        echo 'Use sudo to run this script.' >&2
        exit 1
    fi
    Pour installer d'autre bibliothèques, il suffit de remplacer llibass.so par ce qu'on veut.

    bb84000

  12. #132
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Bonjour à tous,

    Cadeau de Noël :
    Nom : cadeau.png
Affichages : 131
Taille : 33,7 Ko

    Pour réaliser cette magnifique image j'ai poussé le bouton à droite toute et rajouté un TLabeledEdit comme annoncé hier, j'ai passé TickStyle des deux trackbars à tsNone, j'ai modifié fn:=ledFileName.Text; et rajouté "1-" à l'amplitude (pas clair : amplitude:=1-(TrackBar2.Max-TrackBar2.Position)/TrackBar2.Max; c'est mieux), F9, je choisis Stéréo, je mets le curseur de volume à 95, je clique avant ".wav" pour ajouter "-S95", <TAB> m'envoie sur le bon bouton, <ENTRÉE> et voilà !
    Trooooooooooop bien,

    Ah, un dernier mot : dans ton code, j'ai poussé les limites au max (puisque je peux les atteindre avec le trackbar) soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const
      MAX_WAV = 32767;
      MIN_WAV = -MAX_WAV-1; // = -32768
    mais ça impose une 'tite modif' dans WriteValue sinon le compilo n'est pas content (ajout du "=" deux fois) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        if value >= MAX_WAV then value := MAX_WAV;
        if value <= MIN_WAV then value := MIN_WAV;

    Citation Envoyé par bb84000 Voir le message
    J'aurais bien voulu utiliser le TWavvriter natif de FPC, dans le code du "générateur" mais je n'y arrive pas. Il y a une histoire de buffer qui "exceptionne". Ça attendra quelques jours.
    Fais donc voir ton code, qu'on y réfléchisse à plusieurs.

    Quant au script, il va bien, ràs.

    Bonne continuation, bonne journée,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  13. #133
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Voilà le code de départ, récupéré dans le forum Lazarus, je n'ai rien trouvé d'autre sur l'utilisation de l'unité fpwavwriter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
    uses ...., fpwavwriter;  
    .....
    function SaveToWav(const aFilename:String; var aBuffer; aBufferSize: Integer; aBitsPerSample, aSampleRate, aChannelCount :Integer):Boolean;
    var
      vTmp :TWavWriter;
    begin
      Result := False;
      vTmp := TWavWriter.Create;
      try
        vTmp.StoreToFile(aFilename);
        vTmp.fmt.BitsPerSample := aBitsPerSample;
        vTmp.fmt.SampleRate    := aSampleRate;
        vTmp.fmt.Channels      := aChannelCount;
        vTmp.WriteBuf(aBuffer, aBufferSize);
        vTmp.FlushHeader;
        Result := true;
      finally
        vTmp.Free;
      end;
    end;
    Mon idée, c'est de le couper en trois morceaux. Le début qui concerne le header(vTmp.fmt) au moment de lancer la génération du signal (playsine).
    Ensuite concaténer le buffer de la procedure WaveformProc dans un stream, puis quand on veut sauvegarder le wav , utiliser le buffer du stream dans vTmp.WriteBuf .

    Étant entendu que le buffer doit de la procédure WriteBuf doit être en Byte.

    Voilà

    ps. Le fond du problème, c'est que je ne comprends pas bien comment fonctionne fpwavwriter et qu'il n'yl a aucun exemple ni doc...

    bb84000

  14. #134
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Citation Envoyé par bb84000 Voir le message
    ps. Le fond du problème, c'est que je ne comprends pas bien comment fonctionne fpwavwriter et qu'il n'y a aucun exemple ni doc...
    et que c'est très mal fichu...

    Tiens, je te propose ça, qui ne génère plus d'exceptions (c'est l'horreur les pointeurs, ça n'a jamais été clair et encore moins quand on lit l'aide), qui ne plante pas, mais qui génère un fichier où il manque des données dans le header.
    Et je n'ai pas le temps de creuser plus loin aujourd'hui, désolé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    // le code que tu as posté, à peine modifié
    function SaveToWav(const aFilename:String; var aBuffer; aBufferSize, aBitsPerSample, aSampleRate, aChannelCount :Integer):Boolean;
    var
      vTmp :TWavWriter;
    begin
      Result := False;
      vTmp := TWavWriter.Create;
      with vTmp do
        try
          StoreToFile(aFilename);
          fmt.BitsPerSample := aBitsPerSample;
          fmt.SampleRate    := aSampleRate;
          fmt.Channels      := aChannelCount;
          WriteBuf(aBuffer, aBufferSize);
          FlushHeader;
          Result := true;
        finally
          Free;
        end;
    end;
     
    // et ce que j'ai inventé, en piquant ici et là :
    procedure TForm1.btnBernardClick(Sender: TObject);
    const
      Mono  : Word = $0001; //Son mono
      Stereo: Word = $0002; //Son stereo
      zero  : byte = 128;
    var
      buffer: array[0..44099] of byte; // forçage de la taille du buffer sinon c'est sigsegv garanti
      i,asize,abps,asr,acc: integer;
      SineCount : single;
      Frequency : single;
      Amplitude: double;
    begin
      for i := 0 to 44100-1 do buffer[i] := 0;
      asize := SizeOf(buffer);
      Amplitude := 0.5;
      Frequency := 440;
      SineCount :=0;
      case form1.rdgSampleRate.ItemIndex of
        0: asr := 8000;
        1: asr := 11025;
        2: asr := 22050;
        3: asr := 44100;
      end;
      acc := Mono;
      abps:= $0002; // ou $0004 ou $0008 
     
      // write the sine function to the output stream
      for i := 0 to 44100-1 do begin
        SineCount := SineCount + (Frequency / 44100);
        buffer[i] := Round(Sin(SineCount * 2 * PI) * Amplitude*127);
        //Caption := inttostr(i)+'  '+inttostr(buffer[i])+'  '+floattostr(SineCount)
        //  +'  '+floattostr((Sin(SineCount * 2 * PI) * Amplitude)*127);
        //Application.ProcessMessages;
      end;
     
      if SaveToWav('/tmp/bernard.wav',buffer,asize,abps,asr,acc) then showmessage('ok');
    end;
    Et attention avec la boucle en pas-à-pas, il faut impérativement désactiver les optimisations, sinon l'incrémentation 1 par 1 de i n'est pas respectée...

    Tu noteras l'utilisation de x 127 à cause des bytes, sinon les valeurs sont en 0,... et donc les bytes à 0, hé ouais.

    il y a peut-être d'autres choses qui ne vont pas, là on n'a que 1 seconde et à l'oreille, pas de son.
    À toi de jouer,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  15. #135
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Citation Envoyé par Jipété Voir le message
    il y a peut-être d'autres choses qui ne vont pas, là on n'a que 1 seconde et à l'oreille, pas de son.
    À toi de jouer,
    Surement, il y a d'autres choses, parce que je suis bien parvenu à enregistrer quelque chose dans le programme spectrum, en plaçant le writebuffer dans la procédure callback et en lui attribuant le buffer de cette procédure, l'enregistrement a la bonne durée, il y a bien des données dedans, il est reconnu comme un wav 44100/ stéréo virgule flottante, par audacity, mais pas de son.

    Comme mon programme Webradio marche très bien avec les librairies BASS, je ne vais pas me compliquer l'existence.

    Par contre, ce que je ne comprends pas, c'est que si j'essaie de compiler tel quel un code Windows (mais parfaitement portable) sous Linux, j'ai une exception sigdev. Il faut que je recrée l'application à l'identique, et ça marche...

    bb84000

  16. #136
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Citation Envoyé par bb84000 Voir le message
    Surement, il y a d'autres choses, parce que je suis bien parvenu à enregistrer quelque chose dans le programme spectrum, en plaçant le writebuffer dans la procédure callback et en lui attribuant le buffer de cette procédure, l'enregistrement a la bonne durée, il y a bien des données dedans, il est reconnu comme un wav 44100/ stéréo virgule flottante, par audacity, mais pas de son.
    Ne serait-ce pas le piège du curseur horizontal et l'option Reversed ? Genre quand on pousse le curseur ça descend le son, un truc de ouf' !

    Sinon, save2wav-v2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    function SaveToWav(const aFilename:String; var aBuffer; aBufferSize, aBitsPerSample, aSampleRate, aChannelCount :Integer):Boolean;
    var
      vTmp :TWavWriter;
    begin
      Result := False;
      vTmp := TWavWriter.Create;
      with vTmp do
        try
          StoreToFile(aFilename); // création du fichier récepteur
          // création des données
          fmt.BitsPerSample := aBitsPerSample;
          fmt.SampleRate    := aSampleRate;
          fmt.Channels      := aChannelCount;
            // 2 lignes missing :
          fmt.BlockAlign    := aChannelCount * aBitsPerSample div 8;
          fmt.ByteRate      := fmt.BlockAlign * aSampleRate;
          WriteBuf(aBuffer, aBufferSize);
          // vidage des données dans le récepteur
          FlushHeader;
          // il manque deux données, l'une en position 4 (5 6 7) et l'autre en position 40 (41 42 43)
          // données qu'on voit bien dans d'autres codes, exemple :
          // Complete missing header data
    {     AStream.Position := p - 4;
          AStream.WriteDWord(n * numch * BITS_PER_SAMPLE div 8); // Size of data part
          // voir http://soundfile.sapp.org/doc/WaveFormat/ : Subchunk2Size (après 'data') == NumSamples * NumChannels * BitsPerSample/8
          AStream.Position := 4;
          AStream.WriteDWord(AStream.Size - 8);  // File size - RIFF chunk size
          mais ce n'est pas ici que ça doit être fait mais plutôt dans fpwavwriter.FlushHeader tout en bas,
          genre ajouter ce bloc à la suite des autres :
          with fStream do begin
            Position := 4;
            Result := WriteDWord(Size - 8);  // File size - RIFF chunk size
            Position := 40;
            Result := WriteDWord(n * numch * BITS_PER_SAMPLE div 8); // Size of data part;
          end;
          à tester en long en large et en travers bien sûr, avant de proposer cette modif à FPC.
          je ne pense pas que la machine et ses fichiers système risquent grand chose à rajouter
          ces 6 malheureuses lignes qui, si ce n'était pas bon, seraient tellement faciles
          à supprimer que ça serait dommage de s'en priver.
          }
          Result := true;
        finally
          Free;
        end;
    end;
    Allez, je file dans 2 heures mais j'ai des milliards de choses à faire avant,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  17. #137
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour Jipété !

    Alors là, si en plus il manque des trucs dans le code original, ce n'est pas étonnant que cela ne fonctionne pas.
    Si on veut vraiment écrire le wav soi même, il y a le premier code qu'on a vu où l'auteur a correctement recréé l'entête et généré le flux... Et ce n'est guère plus compliqué !

    En tout cas, merci de t'intéresser à tout ça, mais ma solution, c'est d'utiliser BASSENC.

    bb84000

  18. #138
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Bonsoir,

    je suis ce soir un peu désespéré de voir à quel point les choses sont compliquées.

    Prenons l'exemple de ce fpwavwriter dont on a parlé il y a deux jours et dans lequel j'ai rajouté ce qui me semblait bon, et ma foi, le programme compile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    function TWavWriter.FlushHeader: Boolean;
      ...
      with DataChunk do begin
        Id := AUDIO_CHUNK_ID_data;
        Size := Pos - SizeOf(DataChunk) - fStream.Position;
    write(Size); // ajout
      end;
      with fStream do begin
        Result := Write(DataChunk, SizeOf(DataChunk)) = SizeOf(DataChunk);
      end;
      with fStream do begin // block rajouté, sa structure est identique aux blocs précédents
        Position := 4;
        Result := WriteDWord(Size - 8);  // File size - RIFF chunk size
    write(Result); // ajout
        Position := $28; // ou := 40;
        Result := WriteDWord(n * numch * BITS_PER_SAMPLE div 8); // Size of data part;
    write(Result); // ajout
      end;
    end;
    Et si j'en parle, c'est parce qu'en lançant le binaire depuis une console, il s'exécute mais pas les instructions rajoutées, et je ne vois pas les 3 "write", et pas plus si je les remplace par des "writeln".
    Résultat des courses, comme les fichiers FreePascal depuis Lazarus ne supportent pas le pas-à-pas, pas moyen de débugger.
    On fait comment, alors, pour trouver où ça coince ?
    Et pourquoi la console est-elle si silencieuse ?

    Autre chose : j'ai essayé de faire fonctionner le fpwavreader en suivant le principe du fpwavwriter mais là c'est dramatique, la console me balance une énigmatique "Erreur de segmentation" sans préciser la ligne où se produit l'incident !
    Toujours pas de pas-à-pas ni de breakpoint disponibles, et il me semble impossible de récupérer les données lues, si tant est qu'elles le soient...

    Et tout cela est bien dommage car, comme je le dis souvent, "tout sert à tout" et donc, en faisant des recherches sur ce fpwavreader, je suis tombé sur un petit wavexplorer sympathique (lien) qui m'a permis de voir des défauts dans les fichiers stéréo de test de fcl-sound, chose que je considère dramatique si le wavexplorer est correct.

    Mais ceci est une autre histoire et en attendant, je recule ou plutôt, je perds du temps et m'éloigne du but final, pas glop ça, qui est, je le rappelle, d'avoir le générateur de bargraphs le plus parfait possible.
    Et pour ça il faut des fichiers wav... les plus parfaits possibles, et la boucle est bouclée.
    Y a encore du boulot, quoi...

    Citation Envoyé par bb84000 Voir le message
    Si on veut vraiment écrire le wav soi même, il y a le premier code qu'on a vu
    J'en vois tellement, rafraichis-moi la mémoire, stp.
    Merci,

    EDIT : j'ai oublié le code de ma tentative de lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    procedure TForm1.btnTestReaderClick(Sender: TObject);
    var
      aBuffer: array of byte;
      //p: TByteArray absolute aBuffer;
      fStream: TMemoryStream;
      i, aFileSize: integer;
      myfile: string;
      af,acc,asr,abr,aba,abps: integer;
     
      function ReadFromWav(const aFilename:String; var aBuffer):Boolean;
      var
        rTmp :TWavReader;
      begin
        Result := True;
        rTmp := TWavReader.Create;
        with rTmp do
          try
            if not LoadFromFile(aFilename) then begin // loadfromfile appelle loadfromstream
              ShowMessage('Error loading '+aFileName);
              Result := False;
              Free;
              Exit;
            end;
            ReadBuf(aBuffer, aFileSize);  // Buffer
            fStream.Position:=0;
            fStream.SaveToFile('/tmp/leftrightDif.bin'); // vide...
            af  := fmt.Format;
            acc := fmt.Channels;
            asr := fmt.SampleRate;
            abr := fmt.ByteRate;
            aba := fmt.BlockAlign;
            abps:= fmt.BitsPerSample;
          finally
            Free;
          end;
      end;
     
    begin
      myfile := '/temp/leftrightDif.wav';
      aFileSize := FileSize(myfile);
      SetLength(aBuffer, aFileSize);
      fStream := TMemoryStream.Create;
      if ReadFromWav(myfile, aBuffer) then
        showmessage('read ok, StreamSize = '+IntToStr(fStream.Size)+' '+IntToStr(aFileSize));
                                             // 0                        441044
      fStream.Position:=0;
      for i := 0 to aFileSize -1 do fStream.Read(aBuffer[i], 1);
      fStream.Position:=0;
      fStream.SaveToFile('/tmp/leftrightDif.bin2'); // vide... mais dessous valeurs ok: 1 2 44100 88200 2 8
      ShowMessage(inttostr(af)+' '+inttostr(acc)+' '+inttostr(asr)+' '+inttostr(abr)+' '+inttostr(aba)+' '+inttostr(abps))
    end;
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  19. #139
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Citation Envoyé par Jipété Voir le message
    je suis ce soir un peu désespéré de voir à quel point les choses sont compliquées.
    Je pense surtout que ces unités sont boguées (ou non adaptées aux mises à jour successives de FPC). Donc, il ne faut pas trop perdre de temps avec.

    Citation Envoyé par Jipété Voir le message
    J'en vois tellement, rafraichis-moi la mémoire, stp.
    C'est ICI

    Comme je l'ai dit plus haut, comme mon programme repose entièrement sur BASS,parce qu'il y a ce qu'il faut pour MP3, AAC, OGG, FLAC et autres qui sont utilisés par les radios/podcasts sur Internet, WAV n'est utilisé que pour enregistrer les programmes, et encore marginalement, je préfère enregistrer le flux sous son format natif, il n'y a pas d'altération supplémentaire.

    bb

  20. #140
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Bonjour,

    ok merci pour le lien, je ne l'aurais jamais retrouvé, sinon.

    De mon côté, comme je suis plus concerné pour avoir des .wav parfaits pour faire en sorte que l'afficheur de bargraphs arrête de bagotter quand je lui envoie une fréquence pure, j'ai trouvé un truc que je viens de tester à l'instant et qui a fonctionné du premier coup (un miracle !), j'ai nommé PlaySound.

    Je me suis fait une unité PlaySound, j'ai mis le code de la page wiki dedans, j'ai rajouté dans le projet en cours le uses qui va bien comme expliqué, j'ai mis les 3 lignes qu'il faut dans un bouton et hop, musique !
    EDIT :
    Faudra juste que je farfouille dans l'aide de aplayer pour rajouter Pause/Resume et Stop, rien d'insurmontable je pense.
    Hé bien oui, hélas, il semble impossible de dialoguer avec le player (mplayer, les autres sont moins complets) d'une manière simple depuis l'ihm.
    Le plus facile sera sans doute de continuer avec Bass.
    /EDIT

    Hélas, je ne pourrai pas en profiter aujourd'hui, problème de robinetterie à la SdB...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

Discussions similaires

  1. [Requête] Impossible de faire fonctionner !
    Par Nesta92 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 17/04/2007, 09h38
  2. Réponses: 5
    Dernier message: 05/12/2006, 23h57
  3. impossible de faire fonctionner le gridlayout
    Par oceane751 dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 12/06/2006, 10h42
  4. Réponses: 5
    Dernier message: 22/03/2006, 10h39
  5. impossible de faire fonctionner phppgadmin et pgdmin3
    Par le_ben dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 09/12/2004, 14h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo