Tutorials > Tutorial 6: Record a List |
![]() |
Tutorial 6: Record a List
This tutorial lets users record an audio stream, which then shows up in a playlist. Users can then choose from a playback list which recorded stream they want to play back.
In a Web browser, open an instance of tutorial_list.html. Type a name for your stream, and click Record. The name of your recording shows up in the listbox. Select from the listbox to play back your recording.
The tutorial_list.fla file provides the ActionScript to create an audio playback list. By expanding upon this application, you can create playback lists of video sessions, text sessions, drawing sessions, presentations, and more.
This tutorial uses shared objects, the SharedObject.onSync
event handler, and the List Box component.
Before you start to re-create the application, see "Creating your working environment" in Developing Communication Applications.
To create the user interface:
1 |
In the Macromedia Flash MX authoring environment, select File > New to open a new file. |
2 |
From the toolbox, select the Text tool and draw a text box. In the Property inspector (Window > Properties), select Input Text for the type of text box, give it the instance name |
3 |
To create a place for the playlist to be displayed, open the Component panel (Windows > Components), drag the List Box component onto the Stage, and give it the instance name |
4 |
To add the button for recording, drag a push button onto the Stage. In the Property inspector, give it the instance name |
5 |
To add the button for recording, drag a push button onto the Stage. In the Property inspector, give it the instance name |
6 |
From the toolbox, select the Text tool and draw a text box. In the Property inspector (Window > Properties), select Dynamic Text for the text box type, give it the instance name |
7 |
To add the privacy message, select the Text tool and draw a text box. In the Property inspector, select Static Text for the text box type. Type (or copy and paste) text such as the following text into the text box: Your image will be recorded or broadcasted and could be published at a later date. If you don't approve, please exit this application. |
Note: Please note that this text is provided merely as an example, and the precise wording of the text that you use will be dictated by the nature of your application and/or service and any privacy, legal, or other issues raised by your application and/or service. |
|
8 |
To register your application with the server, create a directory named tutorial_list in your /applications directory. |
9 |
Save the file as tutorial_list.fla in this directory, if you wish. |
To write the client-side ActionScript:
1 |
Select the keyframe in the Timeline and open the Actions panel (Window > Actions). |
2 |
In the Actions panel, stop the progress of the movie. |
stop(); |
|
3 |
Create a new connection to the server, handle the status messages, and connect to the server. |
// Create a connection client_nc = new NetConnection(); // Handle status message client_nc.onStatus = function(info) { trace("Level: " + info.level + " Code: " + info.code); } // Connect to the application client_nc.connect("rtmp:/tutorial_list/room_01"); |
|
4 |
Create a remote shared object to hold the recordings that the user will make. |
// Create a remote shared object rec_so = SharedObject.getRemote("recordings", client_nc.uri, false); |
|
5 |
As new recordings are added to the shared object, update the play list. |
// Update the list of recordings as new items are added rec_so.onSync = function(list) { _root.Play_list.removeAll(); // Fill list box with recordings for (var i in _root.rec_so.data) { _root.Play_list.addItem(i); } } |
|
6 |
Remember to connect the shared object to the NetConnection object. |
// Connect to the shared object rec_so.connect(client_nc); |
|
7 |
Create the |
function doRecord() { if (ListItem.text == undefined || ListItem.text == "") { Status_msg.text="Please enter a title."; } else if (Record_btn.getLabel() == "Record") { Status_msg.text="Recording..."; // Stop any currently playing stream if (Play_btn.getLabel() == "Stop") doPlay(); // Don't allow the user to play while recording Play_btn.setEnabled(false); // Create output stream out_ns = new NetStream(client_nc); // Start publishing the audio output as a recorded stream out_ns.attachAudio(Microphone.get()); // Publish the stream out_ns.publish(ListItem.text, "record"); // This allows the entering of single-word list items _root.rec_so.data[ListItem.text] = ListItem.text; _root.rec_so.flush(); // Change the button label Record_btn.setLabel("Stop"); |
|
8 |
In the same |
} else if (Record_btn.getLabel() == "Stop") { // Close output stream out_ns.close(); // Now that you're finished recording, allow the user to play Play_btn.setEnabled(true); // Change the button label Record_btn.setLabel("Record"); // Clear the ListItem.text ListItem.text=""; Status_msg.text="..."; } } // End doRecord method |
|
9 |
Create the |
// Do Play function doPlay () { if (Play_btn.getLabel() == "Play") { Status_msg.text="Playing..."; Play_btn.setLabel("Stop"); // Get the selected recording var playFileName = Play_list.getSelectedItem().label; // Create input stream and play the recording in_ns = new NetStream(_root.client_nc); in_ns.play(playFileName); in_ns.onStatus = function(info) { // Handle errors and stream stopping if (info.level == "error" || info.code == "NetStream.Play.Stop") { Status_msg.text="Stopped sending data..."; Play_btn.setLabel("Play"); } } |
|
10 |
In the same |
} else if (Play_btn.getLabel() == "Stop") { Status_msg.text="..."; //Close the stream in_ns.onStatus = null; in_ns.close(); Play_btn.setLabel("Play"); } } |
To test your application:
1 |
In the Flash MX authoring environment, after you have saved your work, publish it by selecting File > Publish. |
2 |
Open two instances of the SWF file. |
3 |
Add recordings to the playlist and play them back. |
Note: In this sample application, recordings whose names contain more than one word are not supported. |
![]() |