begin process at 2008 05 16 09:08:00
1 173 235 membres
76 nouveaux aujourd'hui
13 970 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

EXTRACTION AUDIO FLV VERS MP3


Information sur la source

Catégorie :Multimedia Classé sous : FLV, MP3, Extraire, FLV2MP3, Deezer Niveau : Débutant Date de création : 14/01/2008 Date de mise à jour : 17/01/2008 14:22:26 Vu / téléchargé: 8 407 / 503

Note :
Aucune note

Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note


Description

[mode hypocrite=on]
Votre radio internet préférée vous propose une écoute de la musique en streaming via la technologie FLV ?

Ce petit module vous permettra d'extraire la piste audio MP3 (uniquement) des fichiers FLV.
[mode hypocrite=off]

Conclusion

Libre a chacun de l'utiliser avec les sources audio qu'il souhaite...

Je ne saurait en être tenu pour responsable...
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

14 janvier 2008 17:25:47 :
Je me suis laissé tenter... J'ai dopé le code de lecture du fichier FLV au FileMapping.
15 janvier 2008 10:20:50 :
mode simple (lecture VB) et mode initié (filemapping)
17 janvier 2008 14:22:39 :
Code commenté. la fonction accepte dorénavant aussi un tableau d'octets
  • signaler à un administrateur
    Commentaire de EBArtSoft le 14/01/2008 16:12:45 administrateur CS

    M%$!de tu ma eu de vitesse, bon faut dire que la source traine sur mon pc depuis Aout dernier.

    Bien joué :p

    Bon et pour la video ? hein hein ? J'ai vu les source de flvsplitter (c#) tout est dedans.

    @+

  • signaler à un administrateur
    Commentaire de Renfield le 14/01/2008 16:17:01 administrateur CS

    'lut EB.

    euh... je m'interesse en fait pas trop aux vidéos, pas le temps de les regarder ^^
    le Mp3 en fond dans les oreilles, pas besoin de lacher l'IDE des yeux...

    dans l'absolu, ma source est mauvaise, puisqu'elle accède sans arrêt aux fichiers... on pourrait les mapper en mémoire, et faire de la voltige, mais bon, le temps de traitement semble correct, pour le moment.
    j'y reviendrais peut etre, si le besoin s'en fait sentir.

  • signaler à un administrateur
    Commentaire de EBArtSoft le 14/01/2008 16:19:16 administrateur CS

    Ohlala je clique pour voir le code vite fait et la je tombe sur quoi !!!

    "Dim xbBytes(2) As Byte"
    "CopyMemory ReadUInt24, xbBytes(0), 4"

    Copier 4 octets quand on en a que 3 c'est pas bieeeeen !
    Bon VB align tout sur 4 donc tu risque rien mais bon par principe :p

    Aller je regarde pas plus sinon je vais ecrire un roman et oui quand on aime on ne compte pas. Enfin ça fait toujours plaisir de voir une de tes sources.

    @+

  • signaler à un administrateur
    Commentaire de Renfield le 14/01/2008 17:27:47 administrateur CS

    Comme mentionné dans la MàJ, j'ai passé le code de lecture au FileMapping, et modifié les lectures qui n'étaient que des skip par de simples incrémentation du pointeur de lecture...

  • signaler à un administrateur
    Commentaire de EBArtSoft le 14/01/2008 17:37:46 administrateur CS

    [Mode chieur = On] Ca aurait ete bien d'avoir les deux methodes pour les debutants qui debutent :p [Mode chieur = Off]

    Si la fonction est destiné à etre appelé en continu pourquoi ne pas en faire une classe avec genre "Open" "Convert" "Close" ce qui permettrait de tirer un max de profit du mapping. Sinon autant ouvrir/lire/ecrire

    (c'etait peut etre a mettre dans le mode chieur ça non ?)

  • signaler à un administrateur
    Commentaire de moustachu le 17/01/2008 09:42:05

    [mode hypocrite=on]
    C'est quoi un mp3

  • signaler à un administrateur
    Commentaire de moustachu le 17/01/2008 09:43:54

    Ouppsss...il faut fermer les balises !
    [mode hypocrite=off]

    Merci pour ce code. très instructif. Surtout d'avoir les deux méthodes.

    ++
    Moustachu

  • signaler à un administrateur
    Commentaire de Renfield le 17/01/2008 09:47:10 administrateur CS

    je vais modifier un peu le module, pour pouvoir lire depuis un flux en mémoire, pas forcément depuis un fichier...
    parce que mes sockets interceptent un flux, hein, pas un fichier ...

    alors si je peux éviter de passer par un fichier .flv intermédiaire.

    je ne sais pas si le mode hypocrite est nécessaire, je ne fait que jouer avec ce qui vient sur mon poste après tout...

  • signaler à un administrateur
    Commentaire de moustachu le 17/01/2008 09:49:10

    3 commentaires en deux minutes, j'aurais pu condenser...
    [Mode chieur = On]Ca aurait été bien un peu plus de commentaires, là, on dirait presque du C ^^[Mode chieur = Off]

    ++
    Moustachu

  • signaler à un administrateur
    Commentaire de Renfield le 17/01/2008 14:31:39 administrateur CS

    Mis à jour.

    j'ai commenté

    et il y a maintenant deux façons de faire:

    Dim sFileName As String
    Dim sFolder As String
        sFolder = "E:\Deezer\"
        sFileName = Dir$(sFolder & "*.flv")
        Do While LenB(sFileName)
            Flv2Mp3 sFolder & sFileName, sFolder & "Mp3\"
            sFileName = Dir$()
        Loop

    ou bien

    Dim xbData() As Byte
        Open "E:\Deezer\Untitled - 83_.flv" For Binary Access Read As #1
            ReDim xbData(LOF(1))
            Get #1, , xbData
        Close #1
        Flv2Mp3 xbData, "E:\Deezer\Mp3\"

    Donc soit:
    - Nom du fichier Flv source
    - Tableau de Byte (contenu du fichier)

    comme je l'ai dit plus haut, ca évite de passer par un fichier intermédiaire dans le cadre de fichiers reçus en live...

    concernant le second paramètre, plusieurs cas sont possibles :
    - il est possible de le laisser vierge.
      1/ depuis un fichier, on écrit dans un fichier portant le même nom (extension mp3)
      2/ depuis un flux, App.Path & "\Untitled.mp3"
    - Si vous spécifiez un nom de dossier, ou un nom de fichier, il sera complété...

    à noter que la fonction n'écrasera aucun fichier: elle incrémentera les noms de fichiers
    à noter également que la fonction va s'assurer que l'arborescence de sortie existe bien (ou la créer si besoin est).

  • signaler à un administrateur
    Commentaire de Renfield le 17/01/2008 14:32:56 administrateur CS

    j'oubliais...

    seule la version rapide (qui utilise entre autres le FileMapping) a été mise a jour.
    la version VB ne changera pas

  • signaler à un administrateur
    Commentaire de EBArtSoft le 17/01/2008 21:12:24 administrateur CS

    moustachu> oulaaa malheureux fait gaffe faut toujours fermer la balise en mode hypocrite sinon on fini au gouvernement :p

    Ren> [mode semi-pressé de voir la suite = tru] c'est pour quand le mode avec les socket hein dit c'est pour quand [mode semi-pressé de voir la suite = falçe]


  • signaler à un administrateur
    Commentaire de Renfield le 17/01/2008 21:44:58 administrateur CS

    la suite ?

    ben j'ai ça en local...
    en "Sample" d'une sorte de proxy http

  • signaler à un administrateur
    Commentaire de moustachu le 18/01/2008 09:44:28

    Ebartsoft>C'est justement parce que j'avais reçu un coup de fil que je me suis dit que j'avais pas fermé ma balise.Pfiouuu, je suis pas passé loin !

    Renfield>Super commenté, ça fait plaisir ! très bien tes fonctions CrackPath et surtout GetUnique. Où as-tu appris comment était constitué un fichier flv ?

    ++
    Moustachu

  • signaler à un administrateur
    Commentaire de Renfield le 18/01/2008 10:00:40 administrateur CS

    la doc est dispo chez macromédia ^^

    CrackPath va me reservir...
    j'avais codé tout un tas de conditions, c'etait sacrément tordu, et j'avais pas cette même garantie de bien gérer tous les cas. Des fois les choses les plus simples...

    GetUnique a été codée y'a longtemps...

    ces deux fonctions sont d'ailleurs sur Codyx, pour les garder sous le coude

  • signaler à un administrateur
    Commentaire de GEDDi le 31/01/2008 01:54:28

    Hello,

    Merci pour ton code!
    Je l'ai adapté au FBSL :)
    Voici le code pour celles et ceux que ça intéresse :
    [code]
    #AppType CONSOLE

    Dim mnIn As Integer, mnOut As Integer
    Dim %i, $sBuff, %nPos

    Flv2Mp3( "Stupeflip - Je fume pu d'shit.flv" )

    Function Flv2Mp3(ByVal szFLVFile As String) As Integer
        mnIn = FileOpen( szFLVFile, BINARY_INPUT )
        Flv2Mp3 = False
        If (ReadUInt32() = &H464C5601) Then
            ReadUInt8() 'flags
            nPos = ReadUInt32()

            FileSeek( mnIn, nPos )'+1
            ReadUInt32() 'prevTagSize

            Do Until FileEof(mnIn)
                ReadTag()
                ReadUInt32() 'prevTagSize
            Loop

            If mnOut Then
                Flv2Mp3 = True
                FileClose( mnOut  )
                mnOut = 0
            End If
        End If
        FileClose( mnIn )
    End Function

    Sub ReadTag()
    Dim eTagType As Integer, eMediaType As Integer, nLength As Integer, xbData As String
    Static xTotal As Integer

        eTagType = ReadUInt8()
        nLength  = ReadUInt24()
        ReadUInt32() 'timeStamp
        ReadUInt24() 'streamID

        If nLength Then
            eMediaType = ReadUInt8()
            xbData = ReadBytes(nLength - 1)
            '# Audio et de type MP3
            If (eTagType = &H8) And (eMediaType \ 16) = 2 Then
                If mnOut = 0 Then
                    xTotal = 0
                    mnOut = FileOpen( ".\out.mp3", BINARY_NEW )
                End If
                xTotal = xTotal + nLength
                FilePut( mnOut, xbData )
                'Locate(5, 5): Print xTotal, " MP3 bytes written"
            End If
        End If
    End Sub

    Function ReadBytes(vnLength As Integer)
        sBuff = FileGet(mnIn, vnLength): Return sBuff
    End Function

    Function ReadUInt32() As Integer
        sBuff = FileGet( mnIn, 4): Return CVI(sBuff, 1)
    End Function

    Function ReadUInt24() As Integer
        sBuff = FileGet( mnIn, 3): Return CVI(sBuff, 1)
    End Function

    Function ReadUInt8() As Integer
        sBuff = FileGet( mnIn, 1): Return CVI(sBuff, 1)
    End Function
    [/code]

    Enjoy!

Ajouter un commentaire

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS