因为上一篇博客代码有点太多,就单开了,这两天主要在看android语音录制和压缩转码相关知识,前端时间看见腾讯官方微博宣布,已经开放出即使聊天软件正在等待审批,但这个直接影响电话运营商,能通过的可能性应该不大,但我对这方面的技术很有兴趣,所以就试试看。其中涉及到很多声音方面的处理问题,在android中有两个类可以录制语音:AudioRecord和MediaRecorder,MediaRecorder主要是录制音频并写入文件,而AudioRecord主要是录制音频流,录制的音频流为pcm格式,关于pcm格式可以自行搜索一下,在传输过程中可以转换为amr格式,但没有相关可以类库有点麻烦,另外iphone不支持播放amr格式音频,如果需要跨两个平台可以使用AAC,压缩比也不错,音质也很好,我还没有测试过,网上评议而已。编码方面大家都推荐speex,我看了一下,需要是用System.loadLibrary加载进speex提供的类库。下面记录一下写的一个边录制边播放的一段代码吧:
View Code JAVA
package voice.hcent.com;
import java.io.IOException;
import android.app.Activity;
import android.os.Bundle;
import android.os.Looper;
import android.os.Process;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioRecord;
import android.media.AudioTrack;
import android.media.MediaRecorder;
public class VoiceHcentActivity extends Activity {
static {
System.loadLibrary("media_jni");
}
public int frequency = 8000;
private int rBufferSize, pBufferSize;
private Button startSpeech;
private AudioRecord recorder;
private VoiceSpeech vspeech;
private AudioTrack player;
private boolean stopSpeech = false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
test();
}
public void init(){
try{
startSpeech = (Button)findViewById(R.id.StartSpeech);
//设置播放器缓冲区大小
pBufferSize = AudioTrack.getMinBufferSize(frequency, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
//获取播放器对象
player = new AudioTrack(AudioManager.STREAM_MUSIC, frequency,
AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT,
pBufferSize, AudioTrack.MODE_STREAM);
//设置录音缓冲区大小
rBufferSize = AudioRecord.getMinBufferSize(frequency,
AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
//获取录音机对象
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
frequency, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT, rBufferSize);
}catch (Exception e) {
String msg = "ERROR init: "+e.getStackTrace();
VoiceHcentActivity.this.toastMsg(msg);
}
}
/**
* 开始录音
*/
public void startRecord(){
stopSpeech = false;
vspeech = new VoiceSpeech();
vspeech.start();
}
/**
* 结束录音
*/
public void stopRecord() {
stopSpeech = true;
}
/**
* 开始播放录音
*/
public void startPlay(){
//设置播放器音量
player.setStereoVolume(0.7f, 0.7f);
player.play();
}
/**
* 结束播放录音
*/
public void stopPlay(){
player.stop();
}
public void test(){
startSpeech.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View arg0, MotionEvent arg1) {
switch (arg1.getAction()) {
case MotionEvent.ACTION_DOWN: //开始说话
startPlay();
startRecord();
toastMsg("starting record!");
break;
case MotionEvent.ACTION_UP: //停止说话
Log.i("hcent", "111");
stopPlay();
Log.i("hcent", "222");
stopRecord();
toastMsg("stoped record!");
break;
default:
break;
}
return false;
}
});
}
public class VoiceSpeech extends Thread{
@Override
public void run() {
super.run();
try {
byte[] tempBuffer, readBuffer = new byte[rBufferSize];
int bufResult = 0;
recorder.startRecording();
while(!stopSpeech){
bufResult = recorder.read(readBuffer, 0, rBufferSize);
if(bufResult>0 && bufResult%2==0){
tempBuffer = new byte[bufResult];
System.arraycopy(readBuffer, 0, tempBuffer, 0, rBufferSize);
player.write(tempBuffer, 0, tempBuffer.length);
}
Log.d("hcent", "get read:"+bufResult+"___"+readBuffer.length);
}
recorder.stop();
Looper.prepare();
VoiceHcentActivity.this.toastMsg("AudioSpeech have ended!");
Looper.loop();
} catch (Exception e) {
String msg = "ERROR AudioRecord: "+e.getStackTrace();
Looper.prepare();
VoiceHcentActivity.this.toastMsg(msg);
Looper.loop();
}
}
}
@Override
protected void onDestroy(){
player.release();
recorder.release();
super.onDestroy();
Process.killProcess(Process.myPid());
}
public void toastMsg(String msg){
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
Log.e("hcent", msg);
}
}
分享到:
相关推荐
本压缩包提供了关于Android语音压缩的源码示例,帮助开发者实现将语音数据压缩50%的功能,从而节省存储空间并提高传输效率。以下是根据标题和描述所涉及的知识点的详细说明: 1. **Android音频录制**: Android...
总的来说,这个"android 语音识别转文字.zip"压缩包是一个集成了多种语音处理功能的DEMO,包括语音识别、文字转语音、录音、播放和文件管理等,对于学习和开发Android语音应用的开发者来说,是一个非常有价值的参考...
在Android应用开发中,语音功能已经变得非常普遍,如语音识别、语音合成、语音消息等。本项目"Android应用源码之语音压缩,android开发...对于想要深入学习Android语音功能开发的开发者来说,这是一个极好的实践案例。
总的来说,Android开发中的语音压缩是一个涉及音频编码理论、平台API使用、性能优化和用户体验等多个方面的复杂任务。通过合理选择和配置编解码器,以及利用合适的工具和策略,开发者可以创建高效且音质良好的语音...
在Android平台上进行语音录制时,开发者常常会遇到各种挑战,如音质、压缩效率和兼容性等。"基于speex的语音录制"是解决这些问题的一种有效方案。Speex是一种开源的音频压缩格式,专为语音通信优化,尤其适合低带宽...
在提供的资源中,“Android 端语音录制成MP3格式,已经封装好,可以直接使用”的标题暗示了存在一个预先封装好的解决方案,它简化了开发过程,只需引入特定的库(jar和so文件)并调用API即可。下面将详细介绍这个过程...
**三、语音录制** 在Android中,使用`MediaRecorder`类可以方便地进行音频录制。设置好输出文件路径、音频源、音频编码格式等参数,例如: ```java MediaRecorder recorder = new MediaRecorder(); recorder....
在安卓(Android)平台上开发应用时,涉及到语音处理是一个常见的需求,尤其是对于音频录制、语音识别、实时通信等场景。本资源"安卓Android源码——语音压缩,android开发语音功能较多使用的时候,压缩大小50%"提供...
在安卓(Android)平台上开发应用程序时,特别是在涉及音频处理,如语音识别、语音聊天或语音录制等场景,处理音频文件的压缩技术显得尤为重要。本文将深入探讨如何在Android中实现语音压缩,特别是如何将语音文件的...
4. **媒体编码与解码**:如AAC(Advanced Audio Coding)和H.264(High Profile),用于音频和视频的高效压缩和传输。 5. **音频处理**:包括回声消除、噪声抑制和增益控制,以提高通话质量。 6. **视频渲染**:...
通过以上知识点的运用,我们可以构建出一个基本的Android语音录音Demo,模拟微信的录音功能。在实际开发中,还可能需要考虑到更多细节,例如录音质量的调整、录音文件的上传、后台录音等问题,以提供更加完善的用户...
在Android平台上进行音频录制涉及到许多核心技术和组件,包括MediaRecorder、AudioRecord以及音频编码格式等。下面将详细探讨这些知识点。 一、MediaRecorder类 MediaRecorder是Android系统提供用于捕捉多媒体数据...
在Android平台上实现P2P(点对点)语音对话,主要涉及到网络通信、音频处理以及实时...总的来说,实现Android P2P语音对话涉及多个技术领域,需要深入理解Android系统的音频和网络特性,并通过不断优化来提升用户体验。
1. **Android语音录制**: Android系统提供了MediaRecorder类用于录音,它可以设置录音的音频源、编码格式、比特率等参数。在录制过程中,我们需要创建MediaRecorder对象,配置参数,然后启动和停止录音。同时,还...
总的来说,Android语音压缩涉及音频编码、比特率控制、采样率调整等多个环节,通过源码学习,我们可以掌握实现这一功能的具体步骤和技巧。结合提供的源码和上述知识点,开发者可以创建出高效、节省空间的语音处理...
例如,JavaApk源码说明可能包含了使用Java编程语言实现的语音压缩算法,这可能涉及到对Android平台的音频API的调用,如AudioRecord和AudioTrack,用于录制和播放语音。GaussRecorder可能是某种语音记录器的名称,它...
在Android平台上开发音视频录制程序是一项常见的任务,它涉及到多媒体处理、硬件访问和编码解码等技术。在本项目中,我们关注的是使用H.263视频编码和AMR_NB音频编码进行录制。以下是对这些关键技术点的详细说明: ...
在Android开发中,实现“仿微信按住录制语音,上滑取消录制”的功能,主要涉及到的是音频录制与播放的相关技术。微信的语音消息功能利用了Android的多媒体框架,特别是`MediaPlayer`类,来处理音频的播放,以及`...
首先,我们需要了解语音录制与播放的基础。Android提供了MediaRecorder和MediaPlayer类用于录音和播放音频。MediaRecorder负责设置录音参数(如音频源、编码格式、质量等),开始和停止录音;MediaPlayer则用来加载...