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

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut Ouvrir un fichier audio Mp3 et pouvoir sélectionner un échantillon de 30s en se déplacant sur l'échantillonage
    Bonjour à toutes et à tous,

    Serait t'il possible d'afficher le fichier audio mp3 sur un bar graph placé sur le Tform afin de sélectionner une plage de 30s et de sauvegarder ce morceau avec une extension AAC ou M4A.

    Merci pour l'aide éventuelle.

    @+,

    cincap

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Avec quelle version de Delphi ? de base ou avec des composants supplémentaires gratuits ou payant ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    @ SergioMaster, merci pour ta réponse.

    Avec Delphi6 et sans composant payant, c'est pour réaliser un logiciel personnel qui me permettrai de choisir un fichier mp3, choisir 30s de musique à une position connue (comme avec le logiciel Audacy) et de le sauvegarder afin de l'utiliser comme sonnerie pour IPhone.

    Je pense que la position du début est plus importante car pour celle de fin on ajoute 30s.

    Donc si on connait la durée maximum de la musique on pourrait utiliser un champ ou serait renseigné en seconde le départ.

    La partie du chargement et lecture mp3, il n'y a pas de problème, c'est pour la sauvegarde au format AAC ou m4a que je suis bloqué.

    On ne sait avoir accès au dossier sons de l'IPhone qu'avec ITunes car ceux qui se substituent provoquent des problèmes au Gsm.

    @+,

    cincap

  4. #4
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Bonjour,

    le plus simple pour toi serait d'utiliser ffmpeg.exe en ligne de commande
    donc utilisable dans une app delphi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ffmpeg -ss 0 -i fichier_source.mp3 -t 30 fichier_sortie.aac
    -ss: indique le début en sec
    -i: le fichier_source.mp3 entre guillemets "" si tu as des espaces dans le nom de fichier
    -t: la durée en sec
    fichier_sortie.aac

    tu trouveras des exemples et de la documentation sur le site

    un exemple concret et testé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\répertoire FFMpeg>ffmpeg.exe -y -ss 00:00:14.539 -i "E:\Savegardes\MP3\Serge Gainsbourg\Aux armes ecetera\Track 21.mp3" -t 30 "E:\Savegardes\MP3\Serge Gainsbourg\Aux armes ecetera\Track 21_Cutted.aac"
    copie et converti 30s à 14.539 secondes du début
    Cordialement,
    @+

  5. #5
    Membre confirmé
    Homme Profil pro
    Santé
    Inscrit en
    Septembre 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 290
    Points : 534
    Points
    534
    Par défaut
    Bonjour,

    Autre solution :
    - il me semble que Delphi 6 contient le contrôle MediaPlayer.
    En tout cas il est présent dans D7 (dans l'onglet "système").

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    Bonjour à toutes et à tous,

    @ Cirec, Hello, merci de ta suggestion, je vais tester et ajouter des Tedit (dans la ligne de commande) pour me permettre d'indiquer le nom du fichier lors du chargement et les secondes pour créer le nouveau fichier au format AAC après le convertir en mca.

    @ Caribensila, merci aussi de ta suggestion, le lecteur primaire que j'avais réalisé utilisait le Tmediaplayer.

    Je vais donc tester et vous tiens au courant.

    @+,

    cincap

  7. #7
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Citation Envoyé par Caribensila Voir le message
    Bonjour,

    Autre solution :
    - il me semble que Delphi 6 contient le contrôle MediaPlayer.
    En tout cas il est présent dans D7 (dans l'onglet "système").
    je ne dirais pas "Autre solution" mais plutôt en complément

    le TMediaPlayer pour charger et positionner la balise de début
    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FormatDateTime('hh:mm:ss.zzz', MediaPlayer1.Position / MSecsPerDay);
    et la partie ffmpeg.exe pour extraire et convertir les données

    Cordialement,
    @+

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    @ Cirec, merci pour ta réponse.

    J'ai téléchargé le fichier FFMPEG avec ton lien mais c'est un fichier compressé et je ne trouve pas l'exécutable lors de la décompression.

    Sur ce site, l'exe existe ?

    En attendant je vais faire une application de test mais comme il fait bon dehors, l'entretien de la parcelle est de mise.

    @+,

    cincap

  9. #9
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 844
    Points : 11 274
    Points
    11 274
    Billets dans le blog
    6
    Par défaut
    Un peu plus loin, après avoir cliqué sur Packages, Windows, Get, je suis arrivé ici : https://ffmpeg.zeranoe.com/builds/ où j'ai choisi version 3.4.2, architecture Win32, static linking, puis téléchargé un zip avec des exe dans le répertoire bin.
    Delphi 5 Pro - Delphi 10.4 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  10. #10
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut

    faut pas sauter sur le premier bouton "Télécharger"
    juste en dessous il y a "Get the packages"
    et quand tu passes avec la souri sur l'icône Windows tu as un premier lien vers les binaires ...

    mais je t'ai mis 2 liens:
    l'un pour Windows 32-bit
    et l'autre pour Windows 64-bit

    Cordialement,
    @+

    EDIT: arf tourlourou a été plus rapide que moi

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    Bonjour à toutes et à tous,

    Merci @ Cirec et tourlourou pour vos explications.

    Lors de mon teste, j'utilise le shellexecute pour la commande mais certainement quelque chose m'échappe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
     
    MonFichier := chappli + 'ffmpeg.exe';
    ShellExecute(Handle,'Open', PChar(Monfichier) -y -ss 00:00:14.539 -i "chappli\aquin.mp3" -t 30 "chappli\aquin_Cutted.aac");
    end;
    Le y et autres ne sont pas reconnus.

    @+,

    cincap

  12. #12
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    re
    deux problèmes dans ton approche
    la liste de paramètres n'est pas construite correctement
    mais l'utilisation de ShellExecute est compliqué avec ffmpeg
    le plus simple est d'utiliser TDosCommand que tu dois certainement avoir ...
    et de faire quelque chose comme ça:
    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
    // ffmpeg.exe se trouve dans le répertoire de l'application
    procedure TForm3.Button3Click(Sender: TObject);
    const
      ffmpegParams = 'ffmpeg.exe -y -ss %s -i "%s" -t 30 "%s"';
    var
     MonFichier, chappli,
     FileIn, FileOut: string;
    begin
      ChAppli := ExtractFilePath(Application.ExeName);
      FileIn := ChAppli + 'aquin.mp3';
      FileOut := ChAppli + 'aquin_Cutted.aac';
      MonFichier := Format(ffmpegParams, [
        FormatDateTime('hh:mm:ss.zzz', MediaPlayer1.Position / MSecsPerDay),
        FileIn,
        FileOut]);
      Memo1.Text := Monfichier; // juste pour voir la ligne de commande
     
      Ds.CommandLine := Monfichier; // Ds = DosCommand
      Ds.Execute;
    end;
    Cordialement,

    @+

  13. #13
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    @ Cirec, décidément, j'ai une exception une fois compilé.

    Grace au Tmemo voici ce qui est indiqué :

    ffmpeg.exe -y -ss 00:00:00.000 -i "C:\Data\Delphi\Lecteur multimedia\2018\aquin.mp3" -t 30 "C:\Data\Delphi\Lecteur multimedia\2018\aquin_Cutted.aac"
    J'ai du téléchargé TDosCommand et j'utilise son unité *.pas dans les uses.

    Le chemin est correct et le nom du fichier aussi.

    @+,

    cincap

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    Bonjour à toutes et à tous,

    J'ai isolé la commande "Ds" et plus d'exception donc c'est bien à ce niveau que cela bloque.

    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
     
    procedure TForm1.Button2Click(Sender: TObject);
    // ffmpeg.exe se trouve dans le répertoire de l'application
    const
      ffmpegParams = 'ffmpeg.exe -y -ss %s -i "%s" -t 30 "%s"';
     
    var
     ds : Tdoscommand;
     FileIn, FileOut: string;
    begin
      ChAppli := ExtractFilePath(Application.ExeName);
      FileIn := ChAppli + 'Aquin.mp3';
      FileOut := ChAppli + 'Aquin_Cutted.aac';
      MonFichier := Format(ffmpegParams, [FormatDateTime('hh:mm:ss.zzz', MediaPlayer1.Position / MSecsPerDay),
        FileIn,FileOut]);
      Memo1.Text := Monfichier; // juste pour voir la ligne de commande
     
      Ds.CommandLine := Monfichier; // Ds = DosCommand //exception à partir d'ici ! (Violation d'accès à l'adresse 00404490..)
      Ds.Execute;
    end;
    Et forcément le fichier ne se crée pas.

    @+,

    cincap

  15. #15
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    re,

    ton TDosCommand est-il bien fait pour ton Delphi 6 ?
    as-tu installé le composant ? // pas obligatoire
    si non:
    as-tu pensé à créer le composant avant ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // dans le OnCreate de la fiche 
    Ds := TDosCommand.Create(Self);
    ton problème vient certainement d'une des 3 pistes
    la ligne de commande est juste et fonctionnel
    et TDosCommand opérationnel du moins avec D7

    Cordialement,
    @+

    EDIT:
    je viens de voir ceci:
    var
    ds : Tdoscommand;
    ton problème est ici :
    déclare Ds en variable globale
    puis dans le OnCreate de la fiche tu y ajoutes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ds := TDosCommand.Create(Self);
    et le code devrait compiler et s'exécuter

  16. #16
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    et pour voir ce qu'il se passe :
    dans ta déclaration de TForm1 tu ajoutes ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      TForm1 = class(TForm)
        ...
        Memo1: TMemo;
        ...
        procedure FormCreate(Sender: TObject);
        procedure DosCommandNewLine(Sender: TObject; NewLine: String;
          OutputType: TOutputType);
        procedure DosCommandTerminated(Sender: TObject; ExitCode: LongWord);
    plus loin:
    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
    implementation
    procedure TForm1.DosCommandNewLine(Sender: TObject; NewLine: String;
      OutputType: TOutputType);
    begin
      Memo1.Lines.Add(NewLine);
    end;
     
    procedure TForm1.DosCommandTerminated(Sender: TObject; ExitCode: LongWord);
    begin
     Memo1.Lines.Add('** Processus terminé **');
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Ds := TDosCommand.Create(self);
      Ds.OnNewLine := DosCommandNewLine;
      Ds.OnTerminated := DosCommandTerminated;
    end;
    voilà ceci devrait compléter l'exemple et le rendre fonctionnel

    Cordialement,
    @+

  17. #17
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    @ Cirec, bien vu comme toujours, cela fonctionne très bien, TdosCommand n'était pas créer, je suppose que je dois aussi le libérer à la fermeture de l'application ? .

    // dans le OnCreate de la fiche
    Ds := TDosCommand.Create(Self);
    J'ai rajouté un TScrollBar pour choisir le début des 30s dont j'ai besoin.

    Il suffit maintenant de renommer le fichier de sortie au format *.m4r pour être accepter par ITunes et être copié sur l'Iphone dans le dossier "Sonneries".

    Je ferai le test ce soir.

    Je considère ce problème comme résolut et remercie tous ceux qui ont participé.

    EDIT: cette ligne provoque une erreur :" Ds.OnTerminated := DosCommandTerminated;"

    [Erreur] Unit1.pas(80): Types incompatibles : 'Les listes de paramètres diffèrent'
    [Erreur fatale] Project1.dpr(5): Impossible de compiler l'unité utilisée 'Unit1.pas'
    @+,

    cincap

  18. #18
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Citation Envoyé par cincap Voir le message
    ... , je suppose que je dois aussi le libérer à la fermeture de l'application ? ...
    non il ne faut pas
    puisqu'il a été crée avec le paramètre "Self" comme Owner (propriétaire)
    c'est donc lui (Self = Form1 ici) qui se chargera de libérer le DosCommand

    Cordialement,
    @+

  19. #19
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    EDIT: cette ligne provoque une erreur :" Ds.OnTerminated := DosCommandTerminated;"
    donne moi le lien où tu as téléchargé TDosCommand tu dois avoir une version différente de la mienne

    il doit y avoir un changement dans les paramètres

  20. #20
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    et pour la conversion finale :
    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
    procedure TForm3.Button4Click(Sender: TObject);
    const
      ffmpegParams = 'ffmpeg.exe -y -i "%s" -f ipod -b:a 96k  "%s"';
    var
     MonFichier, chappli,
     FileIn, FileOut: string;
    begin
      ChAppli := ExtractFilePath(Application.ExeName);
      FileIn := ChAppli + 'aquin_Cutted.aac';
      FileOut := ChAppli + 'aquin_Cutted_Converted.m4p';     //ou m4r ou m4a
      MonFichier := Format(ffmpegParams, [
        FileIn,
        FileOut]);
      Memo1.Text := Monfichier; // juste pour voir la ligne de commande
     
      Ds.CommandLine := Monfichier;
      Ds.Execute;
    end;
    ah oui j'avais oublié
    le paramètre "-y" est là pour autoriser le remplacement de fichiers existants
    sinon ffmpeg attend une réponse clavier
    c'est donc à toi de vérifier que le fichier de sortie n'existe pas déjà

    Cordialement,
    @+
    Voilà yapluka

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. ouvrir des fichier audio sur java
    Par IMEN_ dans le forum Multimédia
    Réponses: 2
    Dernier message: 06/08/2007, 00h21
  2. Créer logiciel pour lire des fichiers audios (mp3 et compagnie)
    Par valebl dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 30/05/2007, 12h12
  3. Réponses: 1
    Dernier message: 21/03/2007, 20h32
  4. [TP] Peut-on ouvrir un fichier mp3 ?
    Par amine6441 dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 07/03/2007, 09h50
  5. Ouvrir un fichier excel sans pouvoir le modifier
    Par snakejl dans le forum Langage
    Réponses: 6
    Dernier message: 09/06/2006, 12h46

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