EXTRACTION ET CONVERSION AVEC DIRECTSHOW ET DSPACK 234 SOUS DELPHI



Documents pareils
Outils informatiques de manipulation de la vidéo et du son : une introduction

Trier les ventes (sales order) avec Vtiger CRM

Qu est ce qu une bibliothèque?

Dans la série LES TUTORIELS LIBRES présentés par le site FRAMASOFT. Compression - Décompression avec 7-Zip. Georges Silva

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

FORMATION MULTIMÉDIA LVE

Les dossiers, sous-dossiers, fichiers

HP Data Protector Express Software - Tutoriel 3. Réalisation de votre première sauvegarde et restauration de disque

2- Relation entre Writer et Calc dans le mailing

Création d'un questionnaire (sondage)

Piratrax 2012 Danger - Effacer vos traces

.NET - Classe de Log

Gestion des utilisateurs : Active Directory

Reaper : utilisations avancées

Export vers le format WAV dans ArtemiS SUITE

Comment autoriser un programme à communiquer avec Internet sous Vista?

Comment enregistrer simplement toute musique restituée par votre PC

Installation Eclipse Galileo. Groupe Entreprenant et Innovateur. France. Tutoriel. Programmation Mobile. Cours. Arón HERRERA PONTE. Coach.

TRUECRYPT SUR CLEF USB ( Par Sébastien Maisse 09/12/2007 )

Tutoriel PowerPoint. Fréquences, puissance et modulation. Benoît Volet 25/02/2010

OwnCloud. Définition 1 / 10. Date d'édition 03/09/2013 Public concerné Étudiants, Personnels Version du logiciel

Démontage d'un ordinateur

Débuter avec OOo Base

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

COMMENT FAIRE? Comment bien se servir de WinHIIP? Expérimenter grâce aux guides imprimés!

Paginer les données côté serveur, mettre en cache côté client

Manuel d'utilisation: Gestion commerciale - CRM

Comment Utiliser les Versions, les Modification, les Comparaisons, Dans les Documents

Date de diffusion : Rédigé par : Version : Mars 2008 APEM 1.4. Sig-Artisanat : Guide de l'utilisateur 2 / 24

GESTION DE L'ORDINATEUR

TalkToMe : votre première appli App Inventor Ce tutoriel vous aidera à construire une appli parlante qui peut sauvegarder des phrases sur demande.

Enregistrer 27. ENREGISTREMENT ouvre une boîte de dialogue similaire à celle qui est décrite ici. «Enregistrement» sous l'écran vidéo

Procédure : Sauvegarder un Windows 7 sur un disque réseau

La Gestion de fichiers Supports réalisés avec OpenOffice.org 2.3 Writer. La Gestion de fichiers. Niveau : Débutant Auteur : Antonio da Silva


1. Introduction Création d'une requête...2

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Gestion collaborative de documents

Le pare-feu de Windows 7

INTRODUCTION GENERALE...1 LA CONNEXION ODBC :...1. CONNEXION AU TRAVERS D EXCEL(tm)...6. LOGICIEL QUANTUM GIS (Qgis)... 10

Guide de l'utilisateur

Gestion d Active Directory à distance : MMC & Délégation

Installation et prise en main

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

Stockage du fichier dans une table mysql:

LA SAUVEGARDE DES DONNEES SUR LES ORDINATEURS PERSONNELS

Windows Live Movie Maker

Tutoriel d'utilisation du logiciel Thunderbird version 2.0

Propagation sur réseau statique et dynamique

Initiation maintenir son ordinateur en forme

ROUTAGE. Répondez aux questions suivantes : (A chaque fois pour XP et pour Debian)

BIND : installer un serveur DNS

1. Création d'un état Création d'un état Instantané Colonnes Création d'un état Instantané Tableau... 4

Documentation utilisateur, manuel utilisateur MagicSafe Linux. Vous pouvez télécharger la dernière version de ce document à l adresse suivante :

Utiliser Freemind à l'école

Grain Tracker Manuel d'utilisation

Gestion des applications, TI. Tout droits réservés, Marcel Aubin

VTigerCRM. CRM : Logiciel de gestion des activités commerciales d'une (petite) entreprise

Edutab. gestion centralisée de tablettes Android

Formations au tournage et au montage vidéo. Monter un film avec. Imovie 11

Les messages d erreur d'applidis Client

"Indy\Source\Fulld7.bat" 6. Lancer à présent Delphi. Allez dans le menu "Composant" puis sur "Installer des paquets...".

Pluridisciplinarité. Classe de BTS DATR

Microsoft Live Messenger

Documentation utilisateur. [EIP] TransLSF

FORMATION MULTIMÉDIA LVE

ésylog, direction technique Esylog_PeerBackup outil de sauvegarde individuelle mails & fichiers personnels documentation technique

CRÉER UN DVD VIDEO avec DVD FLICK (avec ou sans menu)

Tutorial Ophcrack. I) Ophcrack en API. (ou comment utiliser Ophcrack pour recouvrir un mot de passe sous Windows XP et Windows Vista)

Cours 14 Les fichiers

Sauvegarde des bases SQL Express

Description générale de l'interface

Tutoriel Inscription et utilisation basique d'un blog hébergé chez Blogger.com

Module 12 : Configuration et gestion des disques

La gestion du son en AS3 est logique si on se réfère au fonctionnement d'une table de mixage audio!

Protéger ses données dans le cloud

Distinguer entre «Enregistrer» et «Sauvegarder»

PLAN. Qui peut faire quoi? Présentation. L'internaute Consulte le site public

L'accès aux ressources informatiques de l'ufr des Sciences

Les calques supplémentaires. avec Magix Designer 10 et autres versions

Télécharger et Installer OpenOffice.org sous Windows

Dans la série Les tutoriels libres présentés par le site FRAMASOFT. <Handbrake> <Utilisation d'handbrake pour les débutants> Par <OLIVIER LECLERCQ>

Écrit par Riphur Riphur.net

Vous y trouverez notamment les dernières versions Windows, MAC OS X et Linux de Thunderbird.

La balise object incorporer du contenu en HTML valide strict

Déploiement d'une application Visual Studio Lightswitch dans Windows Azure.

SRAL Saint Raphaël. Maison des associations 213, rue de la Soleillette Saint Raphaël. : : dromain.jean-pierre@neuf.

Didacticiel de mise à jour Web

Activité sur Meteor. Annexe 1 : notion de client-serveur et notion de base de données

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Tutoriel Papier sur le logiciel DVD Shrink

Je communique par

Conditions d'utilisation de la version gratuite


JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

Mise à jour de version

Transcription:

EXTRACTION ET CONVERSION AVEC DIRECTSHOW ET DSPACK 234 SOUS DELPHI Table des matières I. INTRODUCTION...2 II. DESIGN DE LA FICHE...2 III. Etude du graphe d'extraction du son et de conversion... 3 IV. Code de l'application... 4 1.Ajout des filtres au graphe...4 a. Ajout du filtre source...4 b. Ajout des filtres intermédiaires... 4 c. Ajout du filtre FILE WRITER... 5 2.Connections des filtres...5 3.Jouer le graphe...6 4.Prise en charge de notre ProgressBar :... 7 V. CONCLUSION... 8

I. INTRODUCTION Nous allons voir avec ce petit tutoriel comment il est possible de réaliser l'extraction de la bande sonore d'un fichier.wmv pour ensuite le convertir en fichier.wav. Nous allons dans un premier temps voir la conception de notre petit module de conversion qui peut aisément être rajouté au media player que nous avons déjà réalisé lors de notre premier tutoriel. Nous allons dans un second temps analysé le graphe permettant de réaliser cette conversion, puis nous en viendrons au codage de ce petit module. II. DESIGN DE LA FICHE Voici un aperçu de la fiche que l'on utilisera pour ce tutoriel : Donc vous allez créer une nouvelle fiche ressemblant à celle-ci. Cette fiche doit comporter les composants suivants : Un bouton permettant d'ouvrir la boîte de dialogue d'ouverture de fichiers multimédia. Un bouton permettant de sauvegarder le fichier wav ouvrant la boîte de dialogue de sauvegarde. Les deux boîtes de dialogue d'ouverture et de sauvegarde de fichier. Un bouton 'Démarrer la conversion' qui va nous permettre de faire jouer la graphe d'extraction et de conversion de fichiers wmv. Un composant ProgressBar pour voir l'état de la conversion. Un composant Timer1 qui va nous permettre de mettre à jour la position de notre progressbar1.

Nous allons donc maintenant étudier le graphe d'extraction et de conversion de fichiers wmv. III. Etude du graphe d'extraction du son et de conversion Voici le graphe que l'on va utiliser pour effectuer cette conversion. Comme vous pouvez le constater nous n'utiliserons que la partie audio du signal, donc nous allons détailler ce graphe maintenant. Nous allons utiliser comme filtre source le Windows Media Source Filter qui est présent dans la catégorie DirectShow Filters. C'est le filtre spécifique permettant d'ouvrir des fichiers Windows Media File.Ce filtre était utilisé avec le lecteur Windows Media Player 6,4. Ce filtre n'utilise pas le Windows Media Format SDK, donc le graphe ne peut pas inclure d'objet DMO. La partie audio doit toujours être reliée à un filtre ASF ACM Handler. Nous relions donc ensuite la sortie de notre filtre source avec l'entrée du filtre intermédiaire ASF ACM Handler. Il est utilisé de même pour garantir la compatibilité avec le lecteur Windows Media Player 6.4. Les nouvelles applications auront plutôt recours à un filtre comme le WM ASF Reader. Mais celui ci ne gère pas les flux (stream). D'ailleurs Microsoft préconise l'utilisation du Windows Media Player SDK pour la gestion des flux. La sortie du filtre ASF ACM Handler doit être relié ensuite à un filtre qui va décoder les informations du fichier de type Windows Media Audio, celui-ci se nomme Windows Media Audio Decoder. Ce filtre convertit les données au format compressé wma au format non compressé (PCM 16 bits). Pour pouvoir convertir le format wma vers le format WAV, il nous faut ensuite un filtre de destination permettant de convertir le fichier vers le format wav, celui ci est le fitre WAV DEST. Il prend donc en entrée un flux audio qui dans notre cas était à l'origine au format wma. Il nous reste plus qu'à enregistrer notre fichier wav sur disque ceci est réalisé grâce au filtre FILE WRITER. Donc nous en avons fini avec l 'étude de notre graphe nous allons passer maintenant à la partie

codage de notre petite application. IV. Code de l'application 1. Ajout des filtres au graphe Comme nous l'a montré l'étude du graphe que l'on vient de réaliser, nous avons vu que nous avions cinq filtres à ajouter au graphe, c'est ce que nous allons réaliser maintenant. a. Ajout du filtre source Nous allons commencé par le filtre qui va nous permettre d'ouvrir un fichier au format Windows Media File. Nous avons vu qu'il s'agissait du filtre Windows Media Source Filter. Le nom du fichier à ouvrir est obtenu par l'intermédiaire de notre composant OpenDialog. Donc voici le code permettant d'ajouter notre filtre à notre graphe. SourceFilter := AjoutFiltre('DirectShow Filters', 'Windows Media source filter', grph); SourceFilter.QueryInterFace(IID_IFileSOurceFilter, filesourcefilter); string2wchar:=stringtowidechar(opendialog1.filename,buffer1,255); filesourcefilter.load(string2wchar, nil); Je vous rappelle que la fonction AjoutFiltre est une fonction que j'ai déjà décrite lors de mon tutoriel sur la gestion des fichiers WMV. Je vous rappelle que l'on est obligé de convertir notre chaîne de caractères renfermant le nom du fichier en type PwideChar ce que fait la fonction stringtowidechar. String2wchar étant de type PwideChar. b. Ajout des filtres intermédiaires Le premier filtre intermédiaire est le filtre ASF ACM Handler. L'ajout de ce filtre se fait par l'intermédiaire du code suivant : IIntermediateFilter3 := AjoutFiltre('DirectShow Filters', 'ASF ACM Handler', grph); Ce filtre se trouve toujours dans la catégorie DirectShow Filters. Le deuxième filtre à ajouter est le filtre 'Windows Media Audio Decoder' qui se trouve toujours dans la catégorie DirectShow Filters : IIntermediateFilter2 := AjoutFiltre('DirectShow Filters', 'Windows Media Audio Decoder', grph); Le troisième filtre à ajouter est le filtre 'WAV DEST', nous le faisons grâce au code suivant :

IIntermediateFilter := AjoutFiltre('DirectShow Filters', 'WAV Dest', grph); c. Ajout du filtre FILE WRITER Il nous plus qu'à insérer dans notre graphe notre filtre de destination, c'est-à-dire celui qui va nous permettre d'enregistrer notre fichier sur disque. Le code qui permet d'ajouter 'FILE WRITER' est le suivant : IDestFilter := AjoutFiltre('DirectShow Filters', 'File writer', grph); Ceci ne suffit pas pourtant, il faut pouvoir renseigner le nom du fichier de sauvegarde à notre filtre. Ceci s'effectue en implémentant l'interface IfileSinkFilter2, comme suit : Filter.QueryInterFace(IID_IFileSinkFilter2, filesinkfilter); filesinkfilter est de type IfileSinkFilter2. L'interface IfileSinkFilter2 contient une fonction permettant d'associer le nom du fichier à notre objet que l'on vient de déclarer, celle-ci est SetFileName. Voici le code qui permet de réaliser cette opération : string2wchar2:=stringtowidechar(savedialog1.filename,buffer2,255); filesinkfilter.setfilename(string2wchar2, nil); Maintenant que nous avons inséré les filtres dans notre graphe, il nous reste à les connecter entre eux. Ceci est l'objet de la prochaine partie. 2. Connections des filtres Tout d'abord il nous faut connecter la broche de sortie de notre filtre source qui se nomme 'Stream1' avec la broche d'entrée de notre filtre intermédiaire (ASF ACM Handler) qui se nomme 'In'. Voici le code nécessaire : ConnectionFiltres('Stream 1', 'In', SourceFilter, IintermediateFilter3); Il nous faut ensuite connecter la sortie de notre premier filtre intermédiaire qui se nomme 'Out' avec l'entrée de notre deuxième filtre intermédiaire (Windows Media Audio Decoder) qui se nomme 'Xform In' : ConnectionFiltres('Out', 'In', IIntermediateFilter3, IintermediateFilter2); Il faut ensuite relier la broche 'Out' de notre deuxième filtre intermédiaire avec l'entré 'In' de notre troisième filtre intermédiaire (WAV Dest). ConnectionFiltres('Out', 'In', IIntermediateFilter2, IintermediateFilter); Il nous reste plus qu'à relier la sortie de notre troisième filtre intermédiaire avec l'entrée 'In' de notre

filtre terminal (File writer). ConnectionFiltres('Out', 'In', IIntermediateFilter, IdestFilter); Maintenant que nos filtres sont connectés entre eux il nous reste plus qu'à lancer le processus d'extraction et de conversion de la partie audio de notre fichier wmv. 3. Jouer le graphe Ceci commence par la création d'un objet de type IcaptureGraphBuilder2 en appelant l'interface IcaptureGraphBuilder2. On lui associe ensuite notre objet de type IfilterGraph par l'intermédiaire de la fonction SetFilterGraph : hr := CoCreateInstance(CLSID_CaptureGraphBuilder2, nil, CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, ICapGraph); IcapGraph.SetFilterGraph(grph); Il faut ensuite effectuer le rendu de notre graphe ceci s 'effectue par l'intermédiaire de la fonction RenderStream, en lui associant les filtres source et de destination : IcapGraph.RenderStream(nil,nil,SourceFilter, nil, IDestFilter); Comme dans le tutoriel précédent lorsqu'un graphe est en train d'être joué, il monopolise toutes les ressources, et nous n'avons plus aucun contrôle sur notre application. Pour pallier ce problème, il faut rajouter le code suivant : felapsed := Now; ncount := 0; Timer1.Enabled :=True; while ncount = 0 do begin if mevent <> nil then begin mevent.waitforcompletion(100, ncount); Application.ProcessMessages; end else break; end; L'Ajout de Application.ProcessMessages permet d'avoir un contrôle sur les autres messages qui pourraient intervenir lors du rendu de notre graphe. L'objet mevent est obtenu en faisant appel à l'interface ImediaEvent comme suit : grph.queryinterface(iid_imediaevent, mevent);

Maintenant que notre graphe est prêt à effectuer sa fonction de conversion nous allons effectuer la prise en charge de notre ProgressBar1. 4. Prise en charge de notre ProgressBar : La première chose à faire est de créer un objet de type ImediaSeeking en appelant l'interface ImediaSeeking: if failed(grph.queryinterface(iid_imediaseeking, mmediaseeking)) then ShowMessage('Can not get IMediaSeeking interface'); Il faut noter que toute les méthodes de notre tutoriel sont des fonctions qui renvoie un résultat, je les ai omis par facilité, mais elles permettent par exemple d'afficher un message d'avertissement si l'opération demandée ne s'est pas bien déroulée. Sachez cependant que ce modèle est utilisable pour toutes les autres méthodes. Cet objet va nous permettre de recueillir la position courante dans le fichier, et la durée totale du fichier. Ces informations sont nécessaires pour mettre à jour la position de notre progressbar au fur et à mesure de la conversion de notre fichier. Bien entendu a mise à jour de la position se fera par l'utilisation de notre objet Timer. A partir de notre objet, nous pouvons obtenir la durée totale de notre clip : mmediaseeking.getduration(dduree); dduree étant de type int64. Une fois cette information acquise, il nous faut acquérir l'information concernant la position actuelle dans le clip, et ceci à chaque appel de la méthode événement OnTimer de notre objet Timer. Pour réaliser cette opération il suffit donc d'écrire le code suivant : mmediaseeking.getcurrentposition(dcurrenttime); dcurrenttime étant aussi de type int64. Ensuite pour mettre à jour la position de notre progressbar, il suffit de réaliser cette opération : ProgressBar1.Position := Round((100 * dcurrenttime/dduree)); Pour indication je vous donne le code complet de la méthode : procedure TForm1.Timer1Timer(Sender: TObject); var ftime : TDateTime; begin ftime := Now-fElapsed; mmediaseeking.getcurrentposition(dcurrenttime); ProgressBar1.Position := Round((100 * dcurrenttime/dduree)); end;

V. CONCLUSION Nous venons de voir comment réaliser une opération d'extraction de l'audio à partir d'un clip audiovisuel au format wmv et de convertir cette partie sous le format wav. Cette opération somme toute assez simple, vous permettra de réaliser d'autres opérations de conversions assez simplement en vous appuyant sur cet exemple.