【问题标题】:Store information in audio file在音频文件中存储信息
【发布时间】:2011-05-25 10:02:29
【问题描述】:

我想在录制 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程序将一些元数据存储到我录制的音频文件中。

问候,
斯内哈

【问题讨论】:

    标签: android


    【解决方案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);
    

    请在调用insert 方法之前检查声音文件是否已经存在。如果文件已经存在,请确保您没有调用它。 未捕获异常,因为异常不在您的代码中。它甚至不在你的过程中。它在 MediaStore 内容提供者的进程中。

    这些链接可以帮助你

    Setting Ringtone notification from SD card file

    Android: save sound as ringtone / SQLiteConstraintException

    【讨论】:

    • 您好,请问上面的变量 mCr 是什么类型的??
    • 谢谢,但是 wat 的应用类型??我刚刚尝试过 ContentResolver mCr = getContentResolver();它没有用。
    • 您必须使用Context 对象才能使用getContentResolver 方法。
    • '上下文 c=getApplicationContext();' ContentResolver mCr = c.getContentResolver(); super.onCreate(savedInstanceState);文件 src=new File(Environment.getExternalStorageDirectory()+"/laserspure.mp3"); ContentValues 值 = 新 ContentValues(); values.put(MediaStore.MediaColumns.DATA, src.getAbsolutePath());
    • 以上代码抛出异常。 05-26 10:03:54.316: 错误/数据库 (213): 插入专辑 ID=-1 标题=BFN 标题_key=%.%6%F% mime_type=audio/mpeg date_added=1306384434 _display_name=laserspure.mp3 is_ringtone=true 时出错_size=63573 artist_id=2 _data=/mnt/sdcard/laserspure.mp3
    【解决方案2】:

    here,这个例子描述了如何从mp3文件中提取id3标签。我认为将信息存储到 mp3 的过程是相似的

    链接到MediaStore

    【讨论】:

      猜你喜欢
      • 2011-08-27
      • 1970-01-01
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      相关资源
      最近更新 更多