Java Sound. Jean-Marc Farinone (Maître de Conférences CNAM)



Documents pareils
RMI le langage Java XII-1 JMF

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Sécurité Java 2. Première approche. Installation des exemples. Exemple d'une applet

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

La norme Midi et JavaSound

Le Modèle de Sécurité dans JAVA

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Introduction au langage Java

Interfaces graphiques avec l API Swing

Solutions du chapitre 4

TP1 : Initiation à Java et Eclipse

Java Licence Professionnelle CISII,

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Programmer en JAVA. par Tama

Durée estimée :1 journée Date de la réalisation : Description Fournisseur Référence Nombre PU HT LM35CZ, LM35AZ LM35DZ

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

LES DIFFÉRENTS FORMATS AUDIO NUMÉRIQUES

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Chaine de transmission

ACTIVITÉ DE PROGRAMMATION

Corrigé des exercices sur les références

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

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Java 7 Les fondamentaux du langage Java

EIP 2012 Projet Livepad. Documentation technique 1.5

Langage Java. Classe de première SI

Remote Method Invocation (RMI)

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Plan du cours. Historique du langage Nouveautés de Java 7

Java Licence professionnelle CISII,

Développement Logiciel

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Programmation en Java IUT GEII (MC-II1) 1

Programmation avancée et répartie en Java : interfaçage avec d autres langages

Projet gestion d'objets dupliqués

Cours 14 Les fichiers

Bases Java - Eclipse / Netbeans

Application de lecture de carte SESAM-Vitale Jeebop

as Architecture des Systèmes d Information

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

Héritage presque multiple en Java (1/2)

DAC. avec interface USB audio et préampli stéréo Casque CONVERTISSEUR DIGITAL VERS ANALOGIQUE. Guide d utilisation V1.1 Jan 2011

PROGRAMMATION PAR OBJETS

GUIDE DE PRODUCTION DES STEMS

La technologie Java Card TM

Programmation par les Objets en Java

Projet de programmation (IK3) : TP n 1 Correction

Java DataBaseConnectivity

INITIATION AU LANGAGE JAVA

Web Tier : déploiement de servlets

Java Licence Professionnelle CISII,

Auto-évaluation Programmation en Java

Applet pour visualiser les variables «automate» notifiées

TP1. Outils Java Eléments de correction

Conception des systèmes répartis

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

Chapitre 10. Les interfaces Comparable et Comparator 1

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Sélection du contrôleur

Certificat Big Data - Master MAthématiques

Etudier l influence de différents paramètres sur un phénomène physique Communiquer et argumenter en utilisant un vocabulaire scientifique adapté

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Tutoriel BlueJ. Michael Kölling Mærsk Institute University of Southern Denmark. Version 1.4 fr-2 par le groupe Sigma 1 pour BlueJ Version 1.2.

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Corrigés des premiers exercices sur les classes

Cours 2 : programmation des interfaces graphiques

TP architecture N-tiers en Java EE ou Java EE, Android : la synthèse. Le serveur GereCompteBancaireServlet

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Le langage JAVA G. Baulieu Institut de Physique Nucléaire de Lyon Septembre 2009

Régler les paramètres de mesure en choisissant un intervalle de mesure 10µs et 200 mesures.

3D Lab. NANO TRANSPORT & NANO PLAYER. Lecteurs réseaux AUDIOPHILE - PROFESSIONNEL. PCM & DSD natif. UPnP DNLA - Bit Perfect media device

Chapitre I Notions de base et outils de travail

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Introduction au langage C

SugarCubes. Jean-Ferdinand Susini Maître de Conférences, CNAM Chaire systèmes enfouis et embarqués. Paris, le 9 janvier, 2009

DMX MASTER I. Notice d utilisation. Lisez soigneusement la notice d utilisation avant d utiliser l appareil! Version 1.

Numérisation du signal

CallRecorder. Octo Quarto

JavaServer Pages (JSP)

Initiation à JAVA et à la programmation objet.

Environnements de développement (intégrés)

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

WORKSHOP OBIEE 11g (version ) PRE-REQUIS:

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

La carte à puce. Jean-Philippe Babau

Les normes MIDI et MIDIFiles

4. Groupement d objets

Réalisation d un diaporama en haute définition avec. Adobe Premiere Elements 3.0 ou Adobe Premiere Pro 2.0. Encodage pour Internet

Utiliser Java sans BlueJ

Configurer le Serveur avec une adresse IP Statique (INTERFACE :FastEthernet) : et un masque

Programmation Internet en Java

Analyse de la bande passante

Transcription:

Java Sound Jean-Marc Farinone (Maître de Conférences CNAM) XXI-1

Traitement des sons : historique Dès la sortie de Java en 1995, on pouvait exécuter des sons (fichiers sons) Mais... Seulement dans les applets de format.au Par contre multi-plateforme (PC, macintosh, Solaris) Voir à http://cedric.cnam.fr/~farinone/afcet/14.html XXI-2

Traitement des sons désormais Utilisable dans les applications comme dans les applets. Complètement intégré dans SDKSE depuis Java 1.3 (i.e. 100% pur Java) => pas de téléchargement supplémentaire en plus du SDKSE (!= Java 3D,, Java Speech). Traite les formats AIFF, AU, WAV, MIDI, et RMF en lecture comme en enregistrement. XXI-3

Documentation pour Java Sound Page de départ de la technologie Java Sound http://java.sun.com/products/javamedia/sound/index.html Tutorial à http://java.sun.com/docs/books/tutorial /sound/index.html Guide de programmation Java Sound à http://java.sun.com/j2se/1.3/docs/guide /sound/prog_guide/javasoundtoc.fm.html XXI-4

Test des sons pour les applets Après installation du SDK 1.3, tester la musique dans le répertoire %JAVA_HOME%\demo\sound par appletviewer JavaSoundDemo.html Si les demos de sons ne sont pas installées, on les trouve sur le site de Java Sound 1DemoJDKSonsApplet.bat XXI-5

Bidouille sécurité Java (1/3) Par défaut les applets ne peuvent pas écrire sur le disque local Depuis Java 1.2, la sécurité peut être "affiné". On peut autoriser certains droits à certaines applets de certaines provenances, etc. Voir tutorial sur la sécurité à http://java.sun.com/docs/books/tutorial /security1.2/index.html XXI-6

Bidouille sécurité Java (2/3) Pour enregistrer des sons par des applets, le fichier.java.policy doit contenir : grant { permission java.io.filepermission "<<ALL FILES>>", "read, write"; permission javax.sound.sampled.audiopermission "record"; permission java.util.propertypermission "user.dir", "read"; }; cf. le README.txt dans %JAVAHOME%\demo\sound Utiliser policytool XXI-7

Bidouille sécurité Java (3/3) : policytool XXI-8

Tester les sons pour applications indépendantes Après installation du SDK 1.3 ou plus, voir les démos sons dans %JAVA_HOME%\demo\sound Téléchargeable http://java.sun.com/products/javamedia/sound/samples/javasounddemo/ Lancer la démo par java -jar JavaSoundDemo.jar 2demoJDKSonsAppli.bat XXI-9

Tester les sons Dans les 2 cas on obtient : XXI-10

La demo Java Sound de SUN (1/5) La démo propose : lecture des divers formats de fichiers sons (Juke Box) capture audio et sauvegarde en divers formats un synthétiseur MIDI une boite à rythmes (Groove box) XXI-11

La demo Java Sound de SUN (2/5) Le juke box : XXI-12 Hum. Pb pour les fichiers.rmf,.mid avec Java 1.5?

La demo Java Sound de SUN (3/5) La capture, sauvegarde et l'exécution de fichier sons XXI-13

La demo Java Sound de SUN (4/5) Le synthétiseur MIDI XXI-14

La demo Java Sound de SUN (5/5) La boite à rythmes (Groove Box) XXI-15 Appuyer sur Start si on a sélectionné Loop

Java Sound Amène une solution logicielle pour le traitement des sons sur ordinateur et évite des cartes sons adéquates. Seul besoin un digital-to-analog converter (DAC) fourni par les cartes sons. Permet de lire (jouer) et écrire (construire de la musique) des fichiers sons. XXI-16

Applet Java Sound : syntaxe C'est le code de 1995!! XXI-17 Repérer le clip audio par public AudioClip getaudioclip(url url) lancée sur l'objet applet courante en indiquant l'url du fichier son. Le chargement (synchrone pas de streaming) est fait à ce moment-ci!= images. Lancer play(), loop() ou stop() sur l'audioclip retourné. Remarque : c'est le même code quel que soit le type de fichier sons.

Applet Java Sound : syntaxe On peut aussi utiliser la méthode public AudioClip getaudioclip(url url, String nomressource) AudioClip leclipaudio;... leclipaudio = getaudioclip(getcodebase(), nomaudioclip);... leclipaudio.play();... leclipaudio.stop();... leclipaudio.loop(); XXI-18

Applet exécute son : exemple complet appletviewer audios.html donne : 3demoDiversFormatsSons.bat Remarques voir taille des divers fichiers sons XXI-19

Applet exécute son : exemple complet import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.applet.audioclip; public class AudioLoop extends JApplet implements ActionListener { AudioClip sound; JButton btjoue, btboucle, btarret; JComboBox btdiversformatssons; String[] tabfichierssons = {"bottle-open.wav", "flute+hrn+mrmba.aif", "spacemusic.au", "trippygaia1.mid"}; Container contentpane = getcontentpane(); XXI-20

Applet exécute son : exemple complet (suite) public void init() { btdiversformatssons = new JComboBox(tabFichiersSons); btjoue = new JButton("joue"); btboucle = new JButton("en boucle"); btarret = new JButton("arrêt"); } contentpane.setlayout(new FlowLayout()); contentpane.add(btdiversformatssons); contentpane.add(btjoue); contentpane.add(btboucle); contentpane.add(btarret); btjoue.addactionlistener(this); btarret.addactionlistener(this); btboucle.addactionlistener(this); XXI-21

Applet exécute son : exemple complet (fin) public void actionperformed(actionevent evt) { } } if (evt.getsource() == btjoue) { sound = getaudioclip(getcodebase(), (String)btDiversFormatsSons.getSelectedItem()); sound.play(); } else if (evt.getsource() == btboucle) { sound = getaudioclip(getcodebase(), (String)btDiversFormatsSons.getSelectedItem()); sound.loop(); } else if (evt.getsource() == btarret) { sound.stop(); } XXI-22

Application indépendante Java Sound : syntaxe Repérer le clip audio par la méthode statique public static final AudioClip newaudioclip(url url) de la classe Applet (!!) en indiquant l'url du fichier son. Lancer play(), loop() ou stop() sur l'audioclip retourné. Remarque : c'est le même code quel que soit le type de fichier sons. XXI-23

Application indépendante Java Sound : syntaxe AudioClip leclipaudio; URL urldelaudioclip = new URL("file:" + emplacementaudioclip); leclipaudio = Applet.newAudioClip(urlDelAudioClip);... leclipaudio.play();... leclipaudio.stop();... leclipaudio.loop(); Ce code peut être utilisé pour une applet. XXI-24

Exercice Construire un seul programme qui soit à la fois une applet et une application indépendante Java Sound Construire le fichier HTML associé. XXI-25

Java Sound : architecture 4 Paquetages : deux concernant MIDI (javax.sound.midi et javax.sound.midi.spi) 2 concernant les sons échantillonés (javax.sound.sampled et javax.sound.sampled.spi). XXI-26

Java Sound vs. Java Sound : exécuter et d enregistrer des sons échantillonnés (sampled) ou MIDI Compression, décompression, synchronisation, transport par anticipation (streaming), transport réseau voir (données temporelles) s'appuie sur Java Sound pour exécuter les sons. XXI-27

Enregistrer avec Java Sound XXI-28

Enregistrer des sons......échantillonnés Traiter par le paquetage javax.sound.sampled deux notions : format de données sonores (data audio format) : PCM, ALAW, ULAW format de fichier son (file audio format) : WAV, AIFF, AU XXI-29

Formats de données sonores (1/3) XXI-30 Son = pression du médium ambiant Indique comment interpréter la suite des octets représentant un son exemple : PCM (Pulse Code Modulation), ALAW, ULAW Représentation linéaire de la pression en PCM Représentation logarithmique de la pression en ALAW, ULAW => meilleure discrétisation pour les sons de faible puissance

Formats de données sonores (2/3) Objet de la classe AudioFormat indiquant XXI-31 le type d'encodage (linéaire ou pas), le nombre de canaux (1 pour monophonique, 2 pour stéréophonique), la vitesse d'échantillonnage, c'est à dire le nombre d'échantillon par seconde et par canal, le nombre de bits pour coder un échantillon, la manière d'ordonner les octets (octets de poids fort en premier ou le contraire), le nombre et la taille des trames (une trame contenant les données sonores de tous les canaux à un instant donné).

Formats de données sonores (3/3) float samplerate = 8000; int samplesizeinbits = 8; int channels = 1; boolean signed = true; boolean bigendian = true; AudioFormat formatdonneesaudio = new AudioFormat(sampleRate, samplesizeinbits, channels, signed, bigendian); La classe AudioFormat permet aussi de connaître les caractéristiques de données audio récupérées XXI-32

Formats de fichiers son Indique la structure d'un fichier son (données + en-tête, taille, nombre d'échantillons, etc.) exemple : WAV, AIFF, AU XXI-33

Formats de fichiers son Objet de la classe AudioFileFormat indiquant le type de fichier (WAV, AIFF, etc.) la taille du fichier le nombre de trames (= les données de tous les canaux pour un intervalle de temps donné) Les données sonores qu'il contient. Ces données sont modélisées par un objet de la classe AudioFormat. XXI-34

AudioSystem = la classe modélisant la gestion de l'audio sur une machine ne contient que des méthodes statiques ~ la "fabrique abstraite" pour l'audio. XXI-35

Une table (console) de mixage XXI-36

Le pipeline de traitement du son entrée Les éléments du pipeline Équaliseur (grave, médium, aigu) Réverbération. Panoramique (= balance) Gain sortie XXI-37

Elements du pipeline = Line Deux exemples de Line : SourceDataLine = ligne (Line) où des données audio peuvent être écrite : HP TargetDataLine = ligne (Line) d'où des données audio peuvent être lues : microphone L'arborescence d'interface : XXI-38

Informations pour trouver une DataLine : DataLine.Info On utilise alors public DataLine.Info(Class lineclass, AudioFormat format) Par exemple : AudioFormat format = new AudioFormat ( ); DataLine.Info info = new DataLine.Info(TargetDataLine.class, format); TargetDataLine line = (TargetDataLine) AudioSystem.getLine(info); XXI-39

Pour obtenir les données audio du microphone AudioFormat format = new AudioFormat ( ); DataLine.Info info = new DataLine.Info(TargetDataLine.class, format); TargetDataLine line = (TargetDataLine) AudioSystem.getLine(info); line.open(format); line.start(); int buffersize = (int)format.getsamplerate() * format.getframesize(); byte buffer[] = new byte[buffersize]; line.read(buffer, 0, buffer.length); XXI-40

Pour envoyer les données audio vers les HP AudioFormat format = new AudioFormat ( ); DataLine.Info info = new DataLine.Info(SourceDataLine.class, format); SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info); line.open(format); line.start(); int buffersize = (int)format.getsamplerate() * format.getframesize(); byte buffer[] = new byte[buffersize]; line.write(buffer, 0, count); XXI-41

Capturer des données audio, les écrire dans un fichier On capture les échantillons nécessaires à une seconde d'écoute. On écrit les échantillons capturés dans un fichier. On vérifie que l'utilisateur n'a pas demandé l'arrêt de la capture. Si non on continue la capture. Si oui on arrête la capture par : line.flush(); line.stop(); XXI-42

Ecouter des données audio XXI-43 On ne peut pas utiliser les programmes de lecture du début de chapitre. Pourquoi? On lit du fichier construit précédemment, les échantillons nécessaires à une seconde d'écoute. On écrit les échantillons capturés dans la SourceDataLine associé au HP. Tant qu'on n'a pas atteint la fin du fichier on recommence cette lecture. Après avoir lu tout le fichier on referme la SourceDataLine par : line.drain(); line.close();

Capturer et écouter des données audio Code complet et détaillé sur : démonstration 5captureAudioDansFichier.bat 6litFichierAudio.bat XXI-44

Bibliographie http://java.sun.com/docs/books/tutorial /sound/index.html : le tutorial Java Sound. http://java.sun.com/j2se/1.3/docs/guide /sound/prog_guide/javasoundtoc.fm.html : le guide de programmation Java Sound XXI-45