Enregistrer du son dans une application de terminal BlackBerry

Les terminaux BlackBerry fonctionnant sur les réseaux CDMA peuvent enregistrer du son dans les formats suivants : AMR 8 kHz mono, PCM 16 bits, GSM 6.10 et QCELP. Le format par défaut d'enregistrement d'audio est AMR.
  1. Importez les classes requises.
    import net.rim.device.api.ui.*;
    import net.rim.device.api.ui.container.*;
    import net.rim.device.api.ui.component.*;
    import java.io.*;
    import java.lang.*;
    import javax.microedition.media.*;
    import javax.microedition.media.control.*;
  2. Créez le cadre d'application en développant la classe UiApplication. Dans main(), créez une instance de la nouvelle classe et appelez enterEventDispatcher() pour activer l'application et recevoir des événements. Dans le constructeur d'application, appelez pushScreen() pour afficher l'écran personnalisé de l'application. La classe AudioRecordingDemoScreen, décrite à l'étape 3, représente l'écran personnalisé.
    public class AudioRecordingDemo extends UiApplication
    {
         public static void main(String[] args)
         {
              AudioRecordingDemo app = new AudioRecordingDemo();
              app.enterEventDispatcher();
         }
         public AudioRecordingDemo()
         {
              pushScreen(new AudioRecordingDemoScreen());
         }
    }
  3. Créez le cadre de l'écran personnalisé en développant la classe MainScreen. Déclarez une instance de la classe AudioRecorderThread, décrite à l'étape 5.
    private class AudioRecordingDemoScreen extends MainScreen
    {	
        private AudioRecorderThread _recorderThread;
        public AudioRecordingDemoScreen()
        {
        }
    }
  4. Dans le constructeur AudioRecordingDemoScreen, appelez setTitle() pour indiquer le titre de l'écran. Appelez addMenuItem() à deux reprises pour ajouter les options de menu démarrant et arrêtant l'enregistrement, comme décrit à l'étape 5.
    public AudioRecordingDemoScreen()
    {
       setTitle("Audio recording demo");
       addMenuItem(new StartRecording());
       addMenuItem(new StopRecording());
    }
  5. Dans la classe AudioRecordingDemoScreen, définissez les options de menu démarrant et arrêtant l'enregistrement. Les options de menu appellent les méthodes AudioRecorderThread.start() et AudioRecorderThread.stop(), décrites à l'étape 6. Dans l'échantillon de code suivant, Player démarre dans son propre fil pour accroître la réactivité des options de menu.
    private class StartRecording extends MenuItem 
    {
        public StartRecording() 
        {
            super("Start recording", 0, 100);
        }
        public void run() 
        {
            try 
            {
                AudioRecorderThread newRecorderThread = new AudioRecorderThread();
                newRecorderThread.start();
                _recorderThread = newRecorderThread;
            } 
            catch (Exception e) 
            {
                Dialog.alert(e.toString());
            }
        }
    }
    private class StopRecording extends MenuItem 
    {
        public StopRecording() 
        {
            super("Stop recording", 0, 100);
        }
        public void run() 
        {
             try 
             {
                 if (_recorderThread != null) 
                 { 
                     _recorderThread.stop();
                 }
             } 
             catch (Exception e) 
             {
                 Dialog.alert(e.toString());
             }
         }
    }
  6. Dans la classe screen AudioRecordingDemo, définissez une classe interne développant Thread et déployant PlayerListener. Dans la classe interne, créez une variable de type Player et une variable de type RecordControl pour enregistrer du contenu multimédia.
    Remarque : Il n'est pas obligatoire d'enregistrer de l'audio dans un fil séparé, car les opérations d'enregistrement sont conçues de manière à contenir plusieurs fils.
    private class AudioRecorderThread extends Thread implements javax.microedition.media.PlayerListener
    {
        private Player _player;
        private RecordControl _recordControl;
        AudioRecorderThread()
        {
        }
    }
  7. Dans la classe AudioRecorderThread, implémentez la méthode Thread de l'interface run(). Créez un bloc try/catch et appelez Manager.createPlayer(String locator) pour créer un objet Player afin d'enregistrer de l'audio, utilisant comme paramètre une valeur indiquant le codage à utiliser.
    public void run() 
    {
        try 
        {
            _player = javax.microedition.media.Manager.createPlayer(
                             "capture://audio?encoding=audio/amr");
        }
        catch( IOException e ) 
        {
            Dialog.alert(e.toString());
        }
        catch( MediaException e ) 
        {
            Dialog.alert(e.toString());
        }
    }
  8. Appelez Player.addPlayerListener(). Indiquez this en tant que paramètre car AudioRecorderThread déploie PlayerListener.
    public void run() 
    {
        try 
        {
            _player = javax.microedition.media.Manager.createPlayer(
                             "capture://audio?encoding=audio/amr");
            _player.addPlayerListener(this);
        }
        catch( IOException e ) 
        {
            Dialog.alert(e.toString());
        }
        catch( MediaException e ) 
        {
            Dialog.alert(e.toString());
        }
    }
  9. Pour enregistrer, appelez Player.realize() pour initialiser l'objet RecordControl. Ensuite, appelez Player.getControl("RecordControl") pour récupérer l'objet RecordControl.
    public void run() 
    {
        try 
        {
            _player = javax.microedition.media.Manager.createPlayer(
                             "capture://audio?encoding=audio/amr");
            _player.addPlayerListener(this);
            _player.realize();
            _recordControl = (RecordControl) _player.getControl("RecordControl" );
        }
        catch( IOException e ) 
        {
            Dialog.alert(e.toString());
        }
        catch( MediaException e ) 
        {
            Dialog.alert(e.toString());
        }
    }
  10. Appelez RecordControl.setRecordLocation() pour spécifier le dossier dans lequel le terminal doit sauvegarder l'enregistrement d'audio.
    public void run() 
    {
        try 
        {
            _player = javax.microedition.media.Manager.createPlayer(
                             "capture://audio?encoding=audio/amr");
            _player.addPlayerListener(this);
            _player.realize();
            _recordControl = (RecordControl) _player.getControl( "RecordControl" );
            _recordControl.setRecordLocation("file:///store/home/user/AudioRecordingTest.amr" );    
        }
        catch( IOException e ) 
        {
            Dialog.alert(e.toString());
        }
        catch( MediaException e ) 
        {
            Dialog.alert(e.toString());
        }
    }
  11. Appelez RecordControl.startRecord() pour lancer l'enregistrement audio et commencer à lire le contenu multimédia. Appelez Player.start() pour démarrer Player.
    public void run() 
    {
        try 
        {
            _player = javax.microedition.media.Manager.createPlayer(
                             "capture://audio?encoding=audio/amr");
            _player.addPlayerListener(this);
            _player.realize();
            _recordControl = (RecordControl) _player.getControl( "RecordControl" );
            _recordControl.setRecordLocation("file:///store/home/user/AudioRecordingTest.amr" );
            _recordControl.startRecord(); 
            _player.start();
        }
        catch( IOException e ) 
        {
            Dialog.alert(e.toString());
        }
        catch( MediaException e ) 
        {
            Dialog.alert(e.toString());
        }
    }
  12. Dans AudioRecorder, implémentez la méthode Thread de l'interface stop(). Vérifiez que Player n'est pas null et appelez Player.close() pour libérer les ressources de l'objet Player. Définissez Player sur null.
    public void stop() 
    {
        if (_player != null) 
        {
            _player.close();
            _player = null;
        }
    }
  13. Vérifiez que RecordControl n'est pas null et appelez RecordControl.stopRecord() pour arrêter l'enregistrement. Dans un bloc try/catch, appelez RecordControl.commit() pour enregistrer la capture dans un fichier précis. Définissez RecordControl sur null.
    public void stop() 
    {
        if (_recordControl != null) 
        {
            _recordControl.stopRecord();
            try 
            {
                _recordControl.commit();
            } 
            catch (Exception e) 
            {
                Dialog.alert(e.toString());
            }
            _recordControl = null;
        }
        if (_player != null) 
        {
            _player.close();
            _player = null;
        }
    }
  14. Dans AudioRecorderThread, déployez PlayerListener.playerUpdate(). Cette méthode est appelée lorsque l'objet Player génère un événement. Dans l'échantillon de code suivant, l'application génère des informations à propos de l'événement.
    public void playerUpdate(Player player, String event, Object eventData) 
    {
        Dialog.alert("Player " + player.hashCode() + " got event " + event + ": " + eventData);
    }

Ces informations vous ont-elles été utiles ? Envoyez-nous vos commentaires.