2011-05-25 104 views
0

我想在錄製MP3文件時存儲藝術家等信息。 :在音頻文件中存儲信息

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) { 
     super(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; 
    } 
} 

}

我有下面的代碼來記錄MP3格式的我的音頻文件。但細節不能添加到它。所以有什麼辦法,以便我可以通過我的android活動/ java程序存儲一些元數據到我錄製的音頻文件中。

問候,
斯納

回答

1

您需要添加音頻信息的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); 

請檢查您是否調用之前已經存在的聲音文件存儲信息爲MP3相似insert方法。如果文件已經存在,請確保您沒有調用它。 由於該異常不在您的代碼中,因此未捕獲異常。它甚至不在你的過程中。它正在MediaStore內容提供商的過程中。

阿欣這些鏈接可以幫助你

Setting Ringtone notification from SD card file

Android: save sound as ringtone/SQLiteConstraintException

+0

嗨我可以知道是什麼類型的變量MCR以上? – Smitha 2011-05-26 03:33:17

+0

添加mcr.Take看看。 – 2011-05-26 03:47:03

+0

謝謝,但wat的應用程序類型??我剛剛嘗試過ContentResolver mCr = getContentResolver();它不起作用。 – Smitha 2011-05-26 04:19:03

0

here,這個例子desribes如何從MP3文件中提取的ID3標籤。我覺得過程

鏈接MediaStore