Android 音频处理专题(播放音乐,音频捕获,音频录制)

Android 音频处理专题(播放音乐,音频捕获,音频录制)

通过mediaplayer 播放音乐

mediaPlayer = MediaPlayer.create(this, R.raw.ylzs);

mediaPlayer.start();
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer.seekTo(position);
mediaPlayer.getDuration();

soundPool
通过MediaStore获取音乐信息
MediaStroe是系统提供的 contentprovider,可以获取音乐文件的相关信息.

String[] columns = { MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media._ID, MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.MIME_TYPE,
MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.IS_RINGTONE,
MediaStore.Audio.Media.IS_ALARM,
MediaStore.Audio.Media.IS_MUSIC,
MediaStore.Audio.Media.IS_NOTIFICATION };

Cursor cursor = managedQuery(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, columns, null,
null, null);

int fileColumn = cursor.getColumnIndex(MediaStore.Audio.Media.DATA);
int titleColumn = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
int displayColumn = cursor
.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME);
int mimeTypeColumn = cursor
.getColumnIndex(MediaStore.Audio.Media.MIME_TYPE);

if (cursor.moveToFirst()) {

String audioFilePath = cursor.getString(fileColumn);
String mimeType = cursor.getString(mimeTypeColumn);

Log.v(“AUDIOPLAYER”, audioFilePath);
Log.v(“AUDIOPLAYER”, mimeType);

Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
File newFile = new File(audioFilePath);
intent.setDataAndType(Uri.fromFile(newFile), mimeType);
startActivity(intent);
}

音频捕获1
通过系统的录音机捕获音频
Intent intent = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION);
startActivityForResult(intent, 0);

protected void onActivityResult ()
audioFileUri = data.getData();
音频捕获2
通过MediaRecorder 捕获音频

File audioFile = new File(“/sdcard/a.tmp”);
recorder.setOutputFile(audioFile);
recorder.prepare();
recorder.start();
recorder.stop();
recorder.getMaxAmplitude() //获取振幅
recorder.setMaxDuration() //设置最大的时长
recorder.setMaxFileSize() //设置最大文件大小

recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

File path = new File(
Environment.getExternalStorageDirectory().getAbsolutePath()+ “record");
path.mkdirs();

2.2版本之后 支持
setAudioChannels: //设置声道
setAudioEncodingBitRate: //设置比特率
setAudioSamplingRate: //设置采样率

录制的声音插入MediaStore
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.MediaColumns.TITLE, “This Isn’t Music”);
contentValues.put(MediaStore.MediaColumns.DATE_ADDED, System.currentTimeMillis());
contentValues.put(MediaStore.Audio.Media.DATA, audioFile.getAbsolutePath());
Uri newUri =
getContentResolver().insert(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, contentValues);

Android裸音频录制
1.设置音源
int audioSource = MediaRecorder.AudioSource.MIC;
2.设置采样率
int sampleRateInHz = 11025;
3.设置声道
int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO;
4.设置声音格式
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
5.获取最小的缓冲区
int bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz, channelConfig,?
audioFormat);
6.构建AudioRecoder
AudioRecord audioRecord = new AudioRecord(audioSource, sampleRateInHz, channelConfig,
audioFormat, bufferSizeInBytes);
7.创建音频出去流
File recordingFile;
File path = new File(Environment.getExternalStorageDirectory()
.getAbsolutePath() + “/Android/data/com.apress.proandroidmedia.ch07
.altaudiorecorder /files/”);
path.mkdirs();
try {
recordingFile = File.createTempFile(“recording”, “.pcm”, path);
} catch (IOException e1) {
throw new RuntimeException(“Couldn’t create file on SD card”, e);
}
DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new
FileOutputStream(recordingFile)));

8循环写出数据
short[] buffer = new short[bufferSize/4];
while (true) {
int bufferReadResult = audioRecord.read(buffer, 0, bufferSize/4);
for (int i = 0; i < bufferReadResult; i++) {
dos.writeShort(buffer[i]);
}
}
audioRecord.stop();
dos.close();

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值