开发者

Store information in audio file

I want to store information like artist while recording an MP3 file. :

public class AudioCap extends Activity {  
    private static final String LOG_TAG = "AudioRecordTest";  
    private static String mFileName = null;  

    private RecordButton mRecordButton = null;  
    private MediaRecorder mRecorder = null;  

    private PlayButton mPlayButton = null;    
    private MediaPlayer mPlayer = null;  

    private void onRecord(boolean start) {  
        if (start) {  
            startRecording();  
    }       else {  
            stopRecording();  
    }  
     }  

    private void onPlay(boolean start) {  
        if (start) {  
            startPlaying();  
        }   else {  
            stopPlaying();  
        }  
    } 

    private void startPlaying() {  
        mPlayer = new MediaPlayer();  
         try {  
            mPlayer.setDataSource(mFileName);  
            mPlayer.prepare();  
            mPlayer.start();  
        } catch (IOException e) {  
             Log.e(LOG_TAG, "prepare() failed");  
        }  
    }  

private void stopPlaying() {
    mPlayer.release();
    mPlayer = null;
}

private void startRecording() {
    mRecorder = new MediaRecorder();
    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
    mRecorder.setOutputFile(mFileName);
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

    try {
        mRecorder.prepare();
    } catch (IOException e) {
        Log.e(LOG_TAG, "prepare() failed");
    }

    mRecorder.start();
}

private void stopRecording() {
    mRecorder.stop();
    mRecorder.release();
    mRecorder = null;
}

class RecordButton extends Button {
    boolean mStartRecording = true;

    OnClickListener clicker = new OnClickListener() {
        public void onClick(View v) {
            onRecord(mStartRecording);
            if (mStartRecording) {
                setText("Stop recording");
            } else {
                setText("Start recording");
            }
            mStartRecording = !mStartRecording;
        }
    };

    public RecordButton(Context ctx) {
        super(ctx);
        setText("Start recording");
        setOnClickListener(clicker);
    }
}

class PlayButton extends Button {
    boolean mStartPlaying = true;

    OnClickListener clicker = new OnClickListener() {
        public void onClick(View v) {
            onPlay(mStartPlaying);
            if (mStartPlaying) {
                setText("Stop playing");
            } else {
                setText("Start playing");
            }
            mStartPlaying = !mStartPlaying;
        }
    };

    public PlayButton(Context ctx) {
        supe开发者_高级运维r(ctx);
        setText("Start playing");
        setOnClickListener(clicker);
    }
}

public AudioCap() {
    mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
    mFileName += "/audiorecordtest.mp3";
}

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);

    LinearLayout ll = new LinearLayout(this);
    mRecordButton = new RecordButton(this);
    ll.addView(mRecordButton,
            new LinearLayout.LayoutParams(
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    0));
    mPlayButton = new PlayButton(this);
    ll.addView(mPlayButton,
            new LinearLayout.LayoutParams(
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    0));
    setContentView(ll);
}

@Override
public void onPause() {
    super.onPause();
    if (mRecorder != null) {
        mRecorder.release();
        mRecorder = null;
    }

    if (mPlayer != null) {
        mPlayer.release();
        mPlayer = null;
    }
}

}

I have following code to record my audio file in mp3 format. But details can't be added to it. So is there any way so that I can store some metadata through my android activity/java program into my recorded audio file.

Regards,

Sneha


You need to add the audio info in the MediaStore

    ContentResolver mCr = app.getContentResolver();
   ContentValues values = new ContentValues();
   values.put(MediaStore.MediaColumns.DATA, your_sound_file.getAbsolutePath());
   values.put(MediaStore.MediaColumns.TITLE, "Name Of Your File");
   values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mpeg");
   values.put(MediaStore.MediaColumns.SIZE, your_sound_file.length());
   values.put(MediaStore.Audio.Media.ARTIST, "Artist Name");
   values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
      //Now set some extra features it depend on you
   values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
   values.put(MediaStore.Audio.Media.IS_ALARM, true);
   values.put(MediaStore.Audio.Media.IS_MUSIC, false);

   Uri uri = MediaStore.Audio.Media.getContentUriForPath(your_file.getAbsolutePath());
   Uri uri2= mCr.insert(uri, values);

Please check if the sound file already exists before you call the insert method .Make sure that you are not calling it if the file's already there. The exception is not caught because the exception is not in your code. It is not even in your process. It is in the process of the MediaStore content provider.

Agin these links can help you out

Setting Ringtone notification from SD card file

Android: save sound as ringtone / SQLiteConstraintException


See here, This example desribes how to extract id3 tags from mp3 file. I think process to store information to mp3 is similar

Link to MediaStore

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜