6
votes

Quelqu'un peut-il donner du code pour un enregistreur vocal comme une application sur téléphone Android?

Je veux développer une application sur le téléphone Android concernant l'enregistreur vocal. Je dois enregistrer un son pendant environ 30 secondes, puis arrêter et enregistrer le son enregistré dans la galerie. Quelqu'un peut-il poster le code si vous avez s'il vous plaît?


0 commentaires

6 Réponses :


2
votes

Vous voulez donc que quelqu'un affiche réellement le code de l'application vous veux coder?

ici c'est , je suppose.


0 commentaires

11
votes

Il y a Un exemple de capture audio Utilisation de Mediarecorder dans la documentation du développeur Android .

Je recommanderais d'enregistrer les fichiers sur la carte SD, puis de vérifier votre code de galerie de vérifier la carte SD pour voir les fichiers à afficher. Vous pouvez obtenir le répertoire de la carte SD à l'aide du Environnement.getexternalstorageDirectory () Méthode . Il serait préférable de sauvegarder vos fichiers dans un sous-répertoire du répertoire racine de carte SD.

Assurez-vous de Donnez vos applications les autorisations qu'il sera besoin . Au moins, il aura besoin record_audio et wreck_external_storage .


0 commentaires

1
votes

Vous pouvez écrire le code d'enregistrement réel ou vous pouvez tirer parti de l'application VOICE RECORDER existante dans votre téléphone ... La plupart des téléphones ont une application d'enregistreur par défaut ....

Appelez StarTactivityForresult avec une action correspondante. Ce qui suit est le code. xxx


0 commentaires


2
votes

Si vous souhaitez enregistrer la voix avec une clarté claire, vous devez utiliser l'enregistreur audio ...

La mise en œuvre de l'enregistreur audio comme suit. strong> p>

     public static int datacount=1;
     private static final int RECORDER_BPP = 16;
      private static final String AUDIO_RECORDER_FILE_EXT_WAV = ".wav";
      private static final String AUDIO_RECORDER_FOLDER = "/'/'";
      private static final String AUDIO_RECORDER_TEMP_FILE = "record_temp.raw";
      private static final int RECORDER_SAMPLERATE = 44100;
      private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_STEREO;
      private static final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT;

      private AudioRecord recorder = null;
      private int bufferSize = 0;
      private Thread recordingThread = null;
      private boolean isRecording = false;
      int numCrossing,p;

      public int frequency;





      public static File myfile;

      private Context mcontext;



      public static String final_sound_path=null;

      Handler handler;



      public static  String filename;


      public Taukyrecorder(Context cntxt) {
        // TODO Auto-generated constructor stub
          mcontext=cntxt;
          handler=new Handler();

          wave=new Taukywave(mcontext);






            bufferSize = AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE,RECORDER_CHANNELS,RECORDER_AUDIO_ENCODING);

            recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
                    RECORDER_SAMPLERATE, RECORDER_CHANNELS,RECORDER_AUDIO_ENCODING, bufferSize);



            recorder.setRecordPositionUpdateListener(new OnRecordPositionUpdateListener() {

                @Override
                public void onPeriodicNotification(AudioRecord recorder) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onMarkerReached(AudioRecord recorder) {
                    // TODO Auto-generated method stub

                }
            }, handler);



    }






    //Get the file for saving sound into the folder
      public File GetFileTOwriteSound()
        {
            File tempPicFile=null;
            String ext_storage_state=Environment.getExternalStorageState();
            File mediaStorage=new File(Environment.getExternalStorageDirectory()+"/TAUKY/SOUNDS");
            if(ext_storage_state.equalsIgnoreCase(Environment.MEDIA_MOUNTED))
            {
                if(!mediaStorage.exists())
                {
                    mediaStorage.mkdirs();
                }else
                {
                    //do nothing
                }

                String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")
                .format(new Date());
                tempPicFile = new File(mediaStorage.getPath() + File.separator
                        + "SOUND_" + timeStamp + ".wav");

            myfile=tempPicFile;

            }
            else
            {

                Toast.makeText(mcontext, "NO SDCARD MOUNTED", 1).show();

            }
            return tempPicFile;
        }







      public String getTempFilename(){
        String filepath = Environment.getExternalStorageDirectory().getPath();
        File file = new File(filepath,AUDIO_RECORDER_FOLDER);

        if(!file.exists()){
          file.mkdirs();
        }

        File tempFile = new File(filepath,AUDIO_RECORDER_TEMP_FILE);

        if(tempFile.exists())
          tempFile.delete();

        return (file.getAbsolutePath() + "/" + AUDIO_RECORDER_TEMP_FILE);
      }

      public void startRecording(){


        recorder.startRecording();

        isRecording = true;



        recordingThread = new Thread(new Runnable() {

          @Override
          public void run() {
            writedataToFile();
          }
        },"AudioRecorder Thread");

        recordingThread.start();
      }

      private void writedataToFile(){
        final byte data[] = new byte[bufferSize];


        filename = getTempFilename();
        FileOutputStream os = null;



        try {
          os = new FileOutputStream(filename);
        } catch (FileNotFoundException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }







        if(null != os){
          while(isRecording){
            read = recorder.read(data, 0, bufferSize);


            wave.Updatewave(data);


//          new Thread(new Runnable() {
//              
//              @Override
//              public void run() {
//                  // TODO Auto-generated method stub
//                  
//                  for (int i = 0; i < read; i++) {
//                      
//                      sum +=data [i] * data [i];
//                  }
//                  if (read> 0) {
//                      final double amplitude = sum / read;
//                      //pb.setProgress((int) Math.sqrt(amplitude));
//                      
//                      wave.Updatewave(amplitude);
//                  }
//              
//                      
//                  
//              }
//          }).start();

            Log.i("recorder", "Recording");


            if(AudioRecord.ERROR_INVALID_OPERATION != read){
              try {
                os.write(data);




                //
              } catch (IOException e) {
                e.printStackTrace();
              }



              numCrossing=0; //initialize your number of zero crossings to 0
              for (p=0;p<bufferSize/4;p+=4) {
                     if (data[p]>0 && data[p+1]<=0) numCrossing++;
                      if (data[p]<0 && data[p+1]>=0) numCrossing++;
                      if (data[p+1]>0 && data[p+2]<=0) numCrossing++;
                      if (data[p+1]<0 && data[p+2]>=0) numCrossing++;
                      if (data[p+2]>0 && data[p+3]<=0) numCrossing++;
                      if (data[p+2]<0 && data[p+3]>=0) numCrossing++;
                      if (data[p+3]>0 && data[p+4]<=0) numCrossing++;
                      if (data[p+3]<0 && data[p+4]>=0) numCrossing++;
                      }//for p

                for (p=(bufferSize/4)*4;p<bufferSize-1;p++) {
                      if (data[p]>0 && data[p+1]<=0) numCrossing++;
                      if (data[p]<0 && data[p+1]>=0) numCrossing++;
                      }



      frequency=(8000/bufferSize)*(numCrossing/2);  // Set the audio Frequency to half the number of zero crossings, times the number of samples our buffersize is per second.



      handler.post(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
             //view.setText("Frequency is"+frequency);

        }
    });

            }
          }

          try {
            os.close();
          } catch (IOException e) {
            e.printStackTrace();
          }
        }
      }

      public void stopRecording(){
          String getfilename=GetFileTOwriteSound().getAbsolutePath();
          final_sound_path=getfilename;
        if(null != recorder){
          isRecording = false;

          recorder.stop();
          recorder.release();

          recorder = null;
          recordingThread = null;
        }

        copyWaveFile(getTempFilename(),getfilename);
        deleteTempFile();
      }

      private void deleteTempFile() {
        File file = new File(getTempFilename());

        file.delete();
      }

      private void copyWaveFile(String inFilename,String outFilename){
        FileInputStream in = null;
        FileOutputStream out = null;
        long totalAudioLen = 0;
        long totalDataLen = totalAudioLen + 36;
        long longSampleRate = RECORDER_SAMPLERATE;
        int channels = 2;
        long byteRate = RECORDER_BPP * RECORDER_SAMPLERATE * channels/8;

        byte[] data = new byte[bufferSize];

        try {
          in = new FileInputStream(inFilename);
          out = new FileOutputStream(outFilename);
          totalAudioLen = in.getChannel().size();
          totalDataLen = totalAudioLen + 36;

          ///AppLog.logString("File size: " + totalDataLen);

          WriteWaveFileHeader(out, totalAudioLen, totalDataLen,
              longSampleRate, channels, byteRate);

          while(in.read(data) != -1){
            out.write(data);
          }

          in.close();
          out.close();
        } catch (FileNotFoundException e) {
          e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }

      private void WriteWaveFileHeader(
          FileOutputStream out, long totalAudioLen,
          long totalDataLen, long longSampleRate, int channels,
          long byteRate) throws IOException {

        byte[] header = new byte[44];

        header[0] = 'R';  // RIFF/WAVE header
        header[1] = 'I';
        header[2] = 'F';
        header[3] = 'F';
        header[4] = (byte) (totalDataLen & 0xff);
        header[5] = (byte) ((totalDataLen >> 8) & 0xff);
        header[6] = (byte) ((totalDataLen >> 16) & 0xff);
        header[7] = (byte) ((totalDataLen >> 24) & 0xff);
        header[8] = 'W';
        header[9] = 'A';
        header[10] = 'V';
        header[11] = 'E';
        header[12] = 'f';  // 'fmt ' chunk
        header[13] = 'm';
        header[14] = 't';
        header[15] = ' ';
        header[16] = 16;  // 4 bytes: size of 'fmt ' chunk
        header[17] = 0;
        header[18] = 0;
        header[19] = 0;
        header[20] = 1;  // format = 1
        header[21] = 0;
        header[22] = (byte) channels;
        header[23] = 0;
        header[24] = (byte) (longSampleRate & 0xff);
        header[25] = (byte) ((longSampleRate >> 8) & 0xff);
        header[26] = (byte) ((longSampleRate >> 16) & 0xff);
        header[27] = (byte) ((longSampleRate >> 24) & 0xff);
        header[28] = (byte) (byteRate & 0xff);
        header[29] = (byte) ((byteRate >> 8) & 0xff);
        header[30] = (byte) ((byteRate >> 16) & 0xff);
        header[31] = (byte) ((byteRate >> 24) & 0xff);
        header[32] = (byte) (2 * 16 / 8);  // block align
        header[33] = 0;
        header[34] = RECORDER_BPP;  // bits per sample
        header[35] = 0;
        header[36] = 'd';
        header[37] = 'a';
        header[38] = 't';
        header[39] = 'a';
        header[40] = (byte) (totalAudioLen & 0xff);
        header[41] = (byte) ((totalAudioLen >> 8) & 0xff);
        header[42] = (byte) ((totalAudioLen >> 16) & 0xff);
        header[43] = (byte) ((totalAudioLen >> 24) & 0xff);

        out.write(header, 0, 44);
      }




}


0 commentaires

3
votes

sortie:

Entrez la description de l'image ici < p> MainAlactivité.java: xxx

main.xml: xxx


0 commentaires