Télécharger le zip
M%$!de tu ma eu de vitesse, bon faut dire que la source traine sur mon pc depuis Aout dernier.Bien joué :pBon et pour la video ? hein hein ? J'ai vu les source de flvsplitter (c#) tout est dedans.@+
'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.
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 :pAller 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.@+
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...
[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 ?)
[mode hypocrite=on]C'est quoi un mp3
Ouppsss...il faut fermer les balises ![mode hypocrite=off]Merci pour ce code. très instructif. Surtout d'avoir les deux méthodes.++Moustachu
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...
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
Mis à jour.j'ai commentéet il y a maintenant deux façons de faire:Dim sFileName As StringDim sFolder As String sFolder = "E:\Deezer\" sFileName = Dir$(sFolder & "*.flv") Do While LenB(sFileName) Flv2Mp3 sFolder & sFileName, sFolder & "Mp3\" sFileName = Dir$() Loopou bienDim 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).
j'oubliais...seule la version rapide (qui utilise entre autres le FileMapping) a été mise a jour.la version VB ne changera pas
moustachu> oulaaa malheureux fait gaffe faut toujours fermer la balise en mode hypocrite sinon on fini au gouvernement :pRen> [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]
la suite ?ben j'ai ça en local...en "Sample" d'une sorte de proxy http
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
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
Hello,Merci pour ton code!Je l'ai adapté au FBSL :)Voici le code pour celles et ceux que ça intéresse :[code]#AppType CONSOLEDim mnIn As Integer, mnOut As IntegerDim %i, $sBuff, %nPosFlv2Mp3( "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 FunctionSub ReadTag()Dim eTagType As Integer, eMediaType As Integer, nLength As Integer, xbData As StringStatic 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 IfEnd SubFunction ReadBytes(vnLength As Integer) sBuff = FileGet(mnIn, vnLength): Return sBuffEnd FunctionFunction ReadUInt32() As Integer sBuff = FileGet( mnIn, 4): Return CVI(sBuff, 1)End FunctionFunction ReadUInt24() As Integer sBuff = FileGet( mnIn, 3): Return CVI(sBuff, 1)End FunctionFunction ReadUInt8() As Integer sBuff = FileGet( mnIn, 1): Return CVI(sBuff, 1)End Function[/code]Enjoy!
Se souvenir du profil
Mot de passe oublié ? / Activation de compteCréer un compte