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();

更多相关文章

  1. android开发【二】(基于android studio3.2)实现简单的音乐播放器
  2. Android studio使用MediaPlayer播放在线音频播放不了java.io.Fil
  3. 音乐播放器 ViewFlipper 滑动屏幕
  4. android 音乐播放器汇总
  5. 开源Jamendo在线音乐播放器源码(二)
  6. 【Android RTMP】安卓直播推流总结 ( 直播服务器搭建 | NV21 图
  7. Android任意窗口添加固定/浮动窗体:音乐播放器底部/顶部常驻播放
  8. Android 音乐播放器的开发教程(一) ----- 小达

随机推荐

  1. ScrollView中的组件设置android:layout_h
  2. android sdk 8-10M/S下载速度,有图有教程
  3. android开发之定制标题栏 --- 附源码
  4. 我的Android工作笔记
  5. android中使用javamail发送邮件附件
  6. 解决Android4.4 Widget之AppWidgetHost.a
  7. NDK编程:Android.mk编译APK范例
  8. [置顶] android中cardview的基本使用
  9. #Android进行文件扫描#
  10. android AsyncQueryHandler的分析