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

Android Discussion :

Comment lire un son depuis un InputStream ?


Sujet :

Android

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 20
    Par défaut Comment lire un son depuis un InputStream ?
    Bonjour à tous!

    Je suis en train de développer un service de player audio.
    Le problème c'est que je stock tous mes fichier à l'aide de Droid4Me. Celui-ci me retourne les fichiers en cache sous forme de InputStream.
    Les methodes permettant de setter des données au MerdiaPlayer prend juste en paramètre un FileDescriptor, String représentant le Path ou un File. Mais pas de InputStream...
    Je n'ai pas très envie de créer un fichier temporaire...

    Avez vous une solution ?

    Merci par avance pour votre aide !

  2. #2
    Membre émérite
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 511
    Par défaut
    Bonjour tkoprowski

    j'ai peut être une solution pour toi, trouvée sur un autre site.

    j'ai modifié le constructeur comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        InputStream streamIn = Test.class.getResourceAsStream("ringout.wav");
        try {
          AudioInputStream stream = AudioSystem.getAudioInputStream(streamIn);
          format = stream.getFormat();
          samples = getSamples(stream);
        } catch (UnsupportedAudioFileException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
    et chez moi cela fonctionne bien

    Cordialement
    Page sur Developpez : http://pbriand.developpez.com

  3. #3
    Membre chevronné Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Par défaut
    Je confirme cette classe sound m'avait bien aidé, et est très pratique !!

  4. #4
    Membre émérite
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 511
    Par défaut
    j'ai pas fait attention que c'est pour android, j'espère que cela marchera aussi sur cette plateforme

    Si c'est pas le cas, milles excuses.
    Page sur Developpez : http://pbriand.developpez.com

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 20
    Par défaut
    Malheureusement, cette classe n'est pas supportée par Android...

    J'ai bien peur d'être obligé de créer un fichier temporaire sur le téléphone...

  6. #6
    Membre chevronné Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Par défaut
    Arg...

    Essaye ce code-ci, je pense que résoud ton cas avec audiotrack, mais pas le fait que tu ne veuille pas écrire de fichier

    edit : oublie ça, je vois que ça ne marche que pour des samples PCM.
    Il serait temps que les api android intègre le streaming audio à ce que je voit
    Citation Envoyé par tkoprowski Voir le message
    Les methodes permettant de setter des données au MerdiaPlayer prend juste

  7. #7
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 20
    Par défaut
    J'avoue... Je me suis résigné à créer une méthode qui écris un fichier en attendant peut être une autre méthode...

    Voici ma méthode:

    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
     
    	public static File inputStreamToFile(InputStream is){
    		try
    		{
    			File f = File.createTempFile("tmp", null);
    			OutputStream out=new FileOutputStream(f);
    			byte buf[]=new byte[1024];
    			int len;
    			while((len=is.read(buf))>0)
    				out.write(buf,0,len);
    			out.close();
    			is.close();
    			return f;
    		}
    		catch (IOException e){}
    		return null;
    	}
    Rien trouvé de mieux pour l'instant.. C'est quand même frustrant de voir ça...

  8. #8
    Membre chevronné Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Par défaut
    Oui c'est dingue, d'autant que j'ai trouvé un nombre incalculable de post sur le sujet, que c'est donc une grosse demande, mais que personne ne se soit lancé dans la réalisation d'une méthode (aussi ardue soit-elle) pour résoudre ce point...

    Je viens de réaliser qu'il faudrait aussi un bouton non-résolu ou infaisable sur ce forum pour montrer que la question est impossible à résoudre.

    Ça commence à faire beaucoup de questions auquel je ne peut pas répondre ...

  9. #9
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour

    http://developer.android.com/referen...udioTrack.html

    Tu dois pouvoir avec cette classe

    public int write (byte[] audioData, int offsetInBytes, int sizeInBytes)

    Since: API Level 3
    Writes the audio data to the audio hardware for playback.
    Parameters

    audioData the array that holds the data to play.
    offsetInBytes the offset expressed in bytes in audioData where the data to play starts.
    sizeInBytes the number of bytes to read in audioData after the offset.
    Returns

    the number of bytes that were written or ERROR_INVALID_OPERATION if the object wasn't properly initialized, or ERROR_BAD_VALUE if the parameters don't resolve to valid data and indexes.
    Bon Courage .

    Edit: je n'avais pas vu mais déjà annoncé , oui c'est pour du pcm à vous de convertir les données

  10. #10
    Membre chevronné Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    Edit: je n'avais pas vu mais déjà annoncé
    Tu aurais pû cliquer sur le petit pouce vert sous mon post, ça fait toujours plaisir

  11. #11
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 20
    Par défaut
    C'est fait Drakiss. Pour AudioTrack t'es sûr que je peux utiliser cette classe pour l'utiliser comme un player classic (play pause tout ça ?) Feanorin ?

  12. #12
    Membre chevronné Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Par défaut
    Citation Envoyé par tkoprowski Voir le message
    C'est fait Drakiss. Pour AudioTrack t'es sûr que je peux utiliser cette classe pour l'utiliser comme un player classic (play pause tout ça ?) Feanorin ?
    Merci, et oui pas de problème pour jouer un flux PCM (apparemment un peu plus pour le mettre en pause), mais il si un autre flux de donnée encodée autrement (WAV,MP3, ou autre) arrive, il te faut la décoder par toi même ou utiliser mediaPlayer qui peut le faire...

    Le serpent qui se mord la queue...

  13. #13
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 20
    Par défaut
    Arf! Tanpis je vais rester sur le fichier temporaire en attendant peut-être une api avec de nouvelles fonctionnalités !

    Merci à tous !

  14. #14
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Tu aurais pû cliquer sur le petit pouce vert sous mon post, ça fait toujours plaisir
    Arf,

    C'est fait Drakiss. Pour AudioTrack t'es sûr que je peux utiliser cette classe pour l'utiliser comme un player classic (play pause tout ça ?) Feanorin ?
    Sinon oui, comme te l'a expliqué Drakiss, faut juste décodé tes donnée audio en format pcm . Play et pause sont disponible dans cette classe.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/12/2010, 23h30
  2. Réponses: 3
    Dernier message: 09/06/2008, 15h01
  3. Lire fichier son depuis le .JAR ?
    Par SheikYerbouti dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 10/04/2007, 01h18
  4. [VB.Net] Comment lire une url depuis un fichier .ini ?
    Par lewebdalex dans le forum VB.NET
    Réponses: 7
    Dernier message: 06/05/2006, 20h32
  5. Comment lire une partie du son *.wav
    Par ryosaebafr2000 dans le forum MFC
    Réponses: 5
    Dernier message: 08/06/2005, 16h00

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