Oyez les "développeux" !
Je pose ma question alors : Comment mettre en place un système d'enregistreur audio avec micro sur le même principe qu'un upload d'image par exemple avec sauvegarde du fichier audio et chemin dans la bdd ?
Merci d'avance![]()
Oyez les "développeux" !
Je pose ma question alors : Comment mettre en place un système d'enregistreur audio avec micro sur le même principe qu'un upload d'image par exemple avec sauvegarde du fichier audio et chemin dans la bdd ?
Merci d'avance![]()
En fouinant un peu sur les forums, je suis tombé sur des pistes notamment les applications de jeanphi et l'enregistrement de l'audiovideo avec Flash et Flash Media Server...
J'aimerais savoir s'il était possible d'enregistrer le fichier audio dans un dossier puis de stocker le chemin dans une bdd comme nous le ferions pour l'upload d'une image en php ??
Merci d'av![]()
Hello!
Tu dois faire ça pour une appli web, ou desktop?
le flash player 10.1 te permet de récupéré les données du son dans un objet ByteArray. Après libre à toi d'en faire ce que tu veux (enregistrer sur le PC de l'utilisateur via FileReference (je crois) ou envoyé à ton serveur)
Pour une appli desktop, si tu package dans une appli air, tu peux sauvegarder ton fichier son dans les répertoires d'installation de l'application ou dans le repertoire user
Après, même si tu veux, tu peux carrément sauvegarder l'enregistrement dans une base de donnée (champ de type BLOB)
Moi aussi je recherche comment faire cette application
Merci de nous faire une petite demo SVP![]()
Comme tu y vas. Une petite démo...
Mieux qu'une démo, Il n'est pas difficile de trouver un bel exemple avec explication:
enregistrement de son AS3 player 10.1
Qu'en penses-tu? Ici il utilise des bibliotèhques qui prémache le travail, mais si tu veux pousser le truc jusqu'au bout, grosso modo:
Mais c'est plus compliqué, et ça demande plus de temps :o)
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 //Tu récupère ton microhpone mic = Microphone.getMicrophone(); //tu écoutes l'arrivés de données mic.addEventListener(SampleDataEvent.SAMPLE_DATA, sampleData); private function sampleData(event : SampleDataEvent) : void { //Tant qu'il reste des bits dans ton bytearray while(event.data.bytesAvailable) { //par de subtiles méthode, tu stockes ton flux dans un bytearray } } private function endRecord():void { //tu clos ton flux, tu lui donne une entête (il existe des librairies), puis tu utilise FileReference pour le faire sauvegarder par ton utilisateur }
Merci beaucoup pour votre réponse, mais j'avais déjà vue ça, le truk que je veut faire c'est la même chose mais le résultat sera stocker coté serveur et no pas coté client![]()
Alors, dans mon exemple, j'ai proposé la méthode FileReference(), après, tu peux tout aussi bien passer le ByteArray à une page PHP pour qu'elle l'enregistre sur le serveur et ainsi stocker ton url en BDD.
Oui, mais le problème je sais pas comment faire tout ça, tu a trouvé des piste ROMAIN ? si c'est le cas veuillez me répondre SVP, je recherche cette information depuis un MOIS ou plus![]()
C'est plutôt bien expliquer sur le blog de romain
Sur quel partie ça ne fonctionne pas?
Sur le blog de romain, le script permet de recorder de l'audio et de l'enregistrer coté client et pas coté serveur, moi je veut le faire coté serveur à l'aide de PHP ?![]()
Et aussi si c'est possible de l'enregistrer dans une BDD ensuite le traité
Je veut la méthode pour récupérer le bytearray en php et l'envoyer au serveur fusionner avec de flash![]()
Sur le blog de Romain tu as déjà la partie pour encoder le fichier en WAVE. C'est une bonne base.
Ensuite, ce fichier, tu te l'envoie en POST à un script PHP capable de, soit ecrire le fichier wave sur ton serveur, soit enregistrer les données dans une BDD via l'objet BLOB (si mes souvenirs sont bons).
Regarde du coté de URLRequest et URLLoader
Je ne l'ai jamais fais en pratique, mais dans la théorie ça donnerais un truc comme ça:
Code AS3 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 var requete:URLRequest = new URLRequest("urlServeur.php") req.method = URLRequestMethod.POST; req.data = { "monFichier", monFichier } var loader:URLLoader = new URLLoader(); //configure les écouteurs qui vont bien loader.load(requete);
Merci
Ca veut dire que sa me donne un truck comme ça:
Après viens le fichier PHP:SaveAudio.PHP
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 package{ import org.bytearray.micrecorder.encoder.WaveEncoder; import org.bytearray.micrecorder.MicRecorder; import org.bytearray.micrecorder.events.RecordingEvent; import flash.events.Event; import flash.events.MouseEvent; import flash.display.MovieClip; import org.as3wavsound.WavSound; import flash.net.FileReference; //je vous renvois à la doc actionscript 3 public class Main extends MovieClip{ private var volume:Number = .5; private var wavEncoder:WaveEncoder; private var recorder:MicRecorder; private var fileReference:FileReference; public function Main(){ wavEncoder = new WaveEncoder( volume ); recorder = new MicRecorder( wavEncoder ); recorder.addEventListener( RecordingEvent.RECORDING, onRecording); recorder.addEventListener( Event.COMPLETE, onRecordComplete); btn.addEventListener( MouseEvent.CLICK, btnClick); btn.label = "Record"; btn_save.alpha = 0; btn_save.addEventListener( MouseEvent.CLICK, save); fileReference = new FileReference(); } private function onRecording(e:RecordingEvent){ trace("recording"); } private function onRecordComplete(e:Event){ var player:WavSound = new WavSound( recorder.output ); player.play(); } private function btnClick(e:MouseEvent){ if(btn.label == "Record"){ btn.label = "Stop"; recorder.record(); } else { btn.label = "Record"; recorder.stop(); btn_save.alpha = 1; } } private function save(e:MouseEvent){ var requete:URLRequest = new URLRequest("saveAudio.php") req.method = URLRequestMethod.POST; req.data = { "audio1.wav", monFichier } var loader:URLLoader = new URLLoader(); //configure les écouteurs qui vont bien loader.load(requete); } } }
J'ai testé mais ça marche pas :s
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <?php $fp = fopen( 'audio1.wav', 'wb' ); header('Content-Type: audio/mpeg'); fwrite( $fp, $GLOBALS[ 'HTTP_RAW_POST_DATA' ] ); fclose( $fp ); ?>
Tu ne peux pas faire du copier-coller de code bêtement comme ça.
Déjà le FileReference ne te sers plus à rien, enlèves le.
Ensuite, si j'en crois le code de Romain, le fichier son final se trouve dans recorder.output.
Donc il faut peut-être faire un truc du genre
pour associer à ta variable audio1.wav le ByteArray utile.
Code AS3 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 req.data = { "audio1.wav", recorder.output}
Ensuite, il te faut les écouteur sur l'URLLoader qui te dirons coté flash qui te permettrons de savoir si tu as une erreur niveau flash (IOErrorEvent), et qui te sortirons la réponse de php (Event.COMPLETE);
et coté php, tu dois faire un echo qui sera renvoyer au flash, et qiu inclu soit un message d'erreur, soit un message de ok que tu pourra faire un trace de ce echo dans ton flash
Ok je vé essayer avec ça, et tu rend le résultat
Merci
Voila les erreurs
De coté PHP rien, on direz qu'il fait pas appelle à ce dernier :s
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 \Bureau\Main.as, Line 103 1180: Call to a possibly undefined method URLLoader. \Bureau\Main.as, Line 101 1120: Access of undefined property URLRequestMethod. \Bureau\Main.as, Line 101 1120: Access of undefined property req. \Bureau\Main.as, Line 100 1180: Call to a possibly undefined method URLRequest. \Bureau\Main.as, Line 103 1046: Type was not found or was not a compile-time constant: URLLoader. \Bureau\Main.as, Line 100 1046: Type was not found or was not a compile-time constant: URLRequest. \Bureau\Main.as, Line 103 1180: Call to a possibly undefined method URLLoader. \Bureau\Main.as, Line 101 1120: Access of undefined property URLRequestMethod. \Bureau\Main.as, Line 101 1120: Access of undefined property req. \Bureau\Main.as, Line 100 1180: Call to a possibly undefined method URLRequest. \Bureau\Main.as, Line 103 1046: Type was not found or was not a compile-time constant: URLLoader. \Bureau\Main.as, Line 100 1046: Type was not found or was not a compile-time constant: URLRequest.
CODE AS3:
Voila le fichier qui enregistre de coté Client çi joint
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109 package { import flash.display.Sprite; import flash.media.Microphone; import flash.system.Security; import org.bytearray.micrecorder.*; import org.bytearray.micrecorder.events.RecordingEvent; import org.bytearray.micrecorder.encoder.WaveEncoder; import flash.events.MouseEvent; import flash.events.Event; import flash.events.ActivityEvent; import fl.transitions.Tween; import fl.transitions.easing.Strong; import flash.net.FileReference; public class Main extends Sprite { private var mic:Microphone; private var waveEncoder:WaveEncoder = new WaveEncoder(); private var recorder:MicRecorder = new MicRecorder(waveEncoder); private var recBar:RecBar = new RecBar(); private var tween:Tween; private var fileReference:FileReference = new FileReference(); public function Main():void { recButton.stop(); activity.stop(); mic = Microphone.getMicrophone(); mic.setSilenceLevel(0); mic.gain = 100; mic.setLoopBack(true); mic.setUseEchoSuppression(true); Security.showSettings("2"); addListeners(); } private function addListeners():void { recButton.addEventListener(MouseEvent.MOUSE_UP, startRecording); recorder.addEventListener(RecordingEvent.RECORDING, recording); recorder.addEventListener(Event.COMPLETE, recordComplete); activity.addEventListener(Event.ENTER_FRAME, updateMeter); } private function startRecording(e:MouseEvent):void { if (mic != null) { recorder.record(); e.target.gotoAndStop(2); recButton.removeEventListener(MouseEvent.MOUSE_UP, startRecording); recButton.addEventListener(MouseEvent.MOUSE_UP, stopRecording); addChild(recBar); tween = new Tween(recBar,"y",Strong.easeOut, - recBar.height,0,1,true); } } private function stopRecording(e:MouseEvent):void { recorder.stop(); mic.setLoopBack(false); e.target.gotoAndStop(1); recButton.removeEventListener(MouseEvent.MOUSE_UP, stopRecording); recButton.addEventListener(MouseEvent.MOUSE_UP, startRecording); tween = new Tween(recBar,"y",Strong.easeOut,0, - recBar.height,1,true); } private function updateMeter(e:Event):void { activity.gotoAndPlay(100 - mic.activityLevel); } private function recording(e:RecordingEvent):void { var currentTime:int = Math.floor(e.time / 1000); recBar.counter.text = String(currentTime); if (String(currentTime).length == 1) { recBar.counter.text = "00:0" + currentTime; } else if (String(currentTime).length == 2) { recBar.counter.text = "00:" + currentTime; } } private function recordComplete(e:Event):void { var requete:URLRequest = new URLRequest("saveAudio.php") req.method = URLRequestMethod.POST; var loader:URLLoader = new URLLoader(); //configure les écouteurs qui vont bien loader.load(requete); } } }![]()
C'est une erreur de compilation ça.
Tu n'importe pas les package?
de plus dans la méthode "recordComplete", tu créé un instance de URLRequest que tu nomme requete, et juste ensuite, la nomme req. Ca ne peut pas marché si tu change son nom.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLRequestMethod;
Voila j'ai corrigé
Le script à réussis à créer un fichier .wav de coté serveur mais VIDE 0 octets
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112 package { import flash.display.Sprite; import flash.media.Microphone; import flash.system.Security; import org.bytearray.micrecorder.*; import org.bytearray.micrecorder.events.RecordingEvent; import org.bytearray.micrecorder.encoder.WaveEncoder; import flash.events.MouseEvent; import flash.events.Event; import flash.events.ActivityEvent; import fl.transitions.Tween; import fl.transitions.easing.Strong; import flash.net.FileReference; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLRequestMethod; public class Main extends Sprite { private var mic:Microphone; private var waveEncoder:WaveEncoder = new WaveEncoder(); private var recorder:MicRecorder = new MicRecorder(waveEncoder); private var recBar:RecBar = new RecBar(); private var tween:Tween; private var fileReference:FileReference = new FileReference(); public function Main():void { recButton.stop(); activity.stop(); mic = Microphone.getMicrophone(); mic.setSilenceLevel(0); mic.gain = 100; mic.setLoopBack(true); mic.setUseEchoSuppression(true); Security.showSettings("2"); addListeners(); } private function addListeners():void { recButton.addEventListener(MouseEvent.MOUSE_UP, startRecording); recorder.addEventListener(RecordingEvent.RECORDING, recording); recorder.addEventListener(Event.COMPLETE, recordComplete); activity.addEventListener(Event.ENTER_FRAME, updateMeter); } private function startRecording(e:MouseEvent):void { if (mic != null) { recorder.record(); e.target.gotoAndStop(2); recButton.removeEventListener(MouseEvent.MOUSE_UP, startRecording); recButton.addEventListener(MouseEvent.MOUSE_UP, stopRecording); addChild(recBar); tween = new Tween(recBar,"y",Strong.easeOut, - recBar.height,0,1,true); } } private function stopRecording(e:MouseEvent):void { recorder.stop(); mic.setLoopBack(false); e.target.gotoAndStop(1); recButton.removeEventListener(MouseEvent.MOUSE_UP, stopRecording); recButton.addEventListener(MouseEvent.MOUSE_UP, startRecording); tween = new Tween(recBar,"y",Strong.easeOut,0, - recBar.height,1,true); } private function updateMeter(e:Event):void { activity.gotoAndPlay(100 - mic.activityLevel); } private function recording(e:RecordingEvent):void { var currentTime:int = Math.floor(e.time / 1000); recBar.counter.text = String(currentTime); if (String(currentTime).length == 1) { recBar.counter.text = "00:0" + currentTime; } else if (String(currentTime).length == 2) { recBar.counter.text = "00:" + currentTime; } } private function recordComplete(e:Event):void { var requete:URLRequest = new URLRequest("saveAudio.php") requete.method = URLRequestMethod.POST; var loader:URLLoader = new URLLoader(); //configure les écouteurs qui vont bien loader.load(requete); } } }![]()
Je croix que c'est le script PHP qui n'a pas récupérer le bytearray :s
Partager