arm录音音频怎么格式工厂如何裁剪音频?急急急 求帮忙解答

她的人气: 4124039
㊣狸窝用户:4557231 位
免费软件 免费咨询,升级VIP会员支持狸窝发展,体验更多狸窝产品
南京婚庆: 你们的产品很好 已升级vip!
乔乔: 刚升级10年会员,狸窝不错 刚完成小孩寒假作业是把视频转换视频.
爱情鸟KTV: 我要好学习狸窝宝典里的教程 我现在可以使用了吧付款198块大洋的套餐
昆山老刘: 我是一个快60的老头 以前用过你们的全能转化工具 最近支持下你们升级了贵宾 以后还请多多指导.
lwplmc: 给女朋友做了一个视频 有视频制作兴趣的朋友交流下 我是198元的用户.
青岛装饰: 狐窝老板 我是刚注册的永久会员 有空来青岛我请你喝酒.
五兄: 用狸窝好久了,觉得不错,刚升级vip,也支持下国产正版
罗伟: 感谢贵公司技术指导赠20元以答谢
天叔: 这么多年了,你真的很敬业,热情,认真。以前你也帮过我
繁华陌上开: 第一次接触狸窝,感觉非常好
产品解决方案
我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
&&&&&&&&客服QQ&&微信: ilandon &&
&&&&& 如果想把一段录音截取后保留自己想要的部分该怎么做? 如何剪辑(截取)音频文件?也可以引申用来做自己的个性铃声,电脑开关机音乐。现在编辑软件很多,这里给大家分享一个音频剪辑(截取)软件,眼见为实,下面就让大家一起体验它强大的功能吧。推荐:、...
音频处理软件,下载: 效果出色
升级狸窝VIP有什么好处
&&&&&&打开剪辑软件,进入如下图所示的操作界面。先将录音或其它需要编辑的音频文件导入到软件上。操作:编辑→导入媒体文件→打开文件夹找到音频→打开。
&&&&& 软件支持wav、mp3、ogg等音频;不支持wma、amr等格式。如需转换格式,这里可以使用免费狸窝全能转换器。音频剪辑使用技巧:
&&&&& 用鼠标将录音文件拖至操作界面下方的音乐轨中,或拖至声音轨也行。
&&&&& 接下来,在时间轴上选定游标尺的位置,即设定剪切的位置。也可以在时间码内输入精确的数值,可精确到0.01秒。选中并右击音频文件,出现上拉菜单中选择“分割素材”,即可剪切音频了。
&&&&& 按上述操作方法,再“分割素材”,不需要的音频部分,直接鼠标点击选中,再按Delete键删除掉。
&&&&& 删剪掉不需要的部分后,保存需要的录音音频部分。如果保留的音频开始不在时间轴的零起点,可用鼠标拖曳至开始零起点。
&&&&& OK,编辑好后,就可以导出文件了。操作:分享→创建声音文件→弹出文件夹中选择好输出路径及命名文件→保存。
&&&&& 接下来,软件自动渲染文件。这个音频文件体积很小,就一瞬间的时间,就渲染完毕了。呵呵。到指定路径就能找到该编辑好后的音频文件了。
&&&&& 这个软件剪切音频,可以说是随心所欲,想剪哪里就剪哪里,还能很精确的剪切。不仅能剪辑(截取)音频,还能剪辑(截取)视频文件,大家有目共睹的,操作很简单易上手。对了,有需要的朋友,可以看下“视频: 截取+剪切”。
&&&&& 狸窝 -& 为用户提供解决方案!升级1个vip帐号可以使用狸窝所有软件,包括正在开发的软件,以及以后开发的软件!入口:&不仅仅是让用户享受到狸窝给用户带来的舒心和便利,更要让用户在服务中体验到狸窝的尊重和关怀,满足用户的增值服务需求!
收集了几个不错的解决方案,很好玩:
如何截取在线视频做gif:
摇头娃娃在线制作:
多个视频加片头(好玩)
【笑话 微坑爹,冰凉的幽默】展昭:“包大人,你额头的月牙是怎么弄的?”包青天:“天生的。”展昭:“揭得下来吗?”包青天:“天生的。揭不下来。”展昭:“如果揭下来呢?”包青天:“揭下来…………揭下来就是见证奇迹的时刻……”
☆?☆&&&&&& &☆?☆
』, 狸窝的强大离不开写作教程老师的付出
Tags: 狸窝宝典 & && & & & & & & && & & &&&&←活到老 学到老!
&&&&狸窝是帮助用户解决问题 提供教程解决方案 在这个过程中有使用我们自己开发的软件 也有网上找的工具 只要帮助用户解决问题就好!在这个过程中我们的教程方案写作老师比较辛苦 有时为了一个教程要试验测试好几天及连续加班多日, 而大家的赞赏是一种肯定和表扬 不在于多少|打赏随意|只要你开心, 更像征一种鞭策和鼓励!!!
我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件的评论
#1 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
#2 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
去掉视频中间一段
#3 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
视频和音频合并
#4 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
视频加特效
#5 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
视频画面旋转
#6 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
直接添加图片制作相册
#7 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
视频合并加转场效果
#8 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
明天要考微积分了,打个电话告诉父母我爱他们,谢谢多年的养育之恩。好好洗个澡,然后最后踢 一局实况足球。把宿舍零食大吃一顿,吃不掉的分给舍友。衣服能捐的就捐了。向感到愧对的人说声对不 起。睡前对每个朋友发一条晚安,然后向暗恋的女生表白。关机后安静地躺在被窝里,告诉自己,我爱这 个世界。
#9 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
想问一下,ppt怎样才可以转换成视频的,哪个版本的可以啊?:
#10 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
大学生职业生涯规划ppt模板:
#11 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
直接添加图片制作相册
#12 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
四川麻将单机版
#13 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
刀,是什么样的刀?金丝大环刀剑!剑,是什么样的剑?闭月羞光剑!招,是什么样的招?天地阴阳招人!人,是什么样的人?飞檐走壁的人!情,是什么样的情?美女爱英雄!
#14 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
视频合并软件 多个视频加片头(好玩)
#15 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
怎么用音乐切割器把音乐文件平均分割为N段:
#16 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
ps做倒影效果
#17 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
怎么下载网页swf文件 网页swf素材下载方法:
#18 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
怎样刻录cd音乐光盘-音乐cd刻录的最简易方法:
#19 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
看见前女友和她的新欢走在一起的时候,已经无处可躲了,只好硬着头皮上去打招呼:“哎呀,好久不见,你儿子都这么高了。”
#20 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
A:在吗?你咋还不找女朋友?真替你着急啊!
B:在的,我是他女朋友呀?有事吗?
A:你是用右手发信息的吧!
#21 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
电子请柬制作:
#22 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
Adobe After Effects CS4绿化版:
#23 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
老夫妇去拍照,摄影师问:“您是要测光,逆光,还是全光”大爷腼腆的说:“我是无所谓,能不能给你大妈留条裤衩”
#24 楼 回复:我想将一段录音中部分剪出来, 如何剪辑(截取)音频文件
爱奇艺视频下载:请问下手机arm录音文件怎么打开_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
请问下手机arm录音文件怎么打开
我用手机快播打开提示列表为空。无法播放。用天天动听扫描也是没找到音乐。录了3分钟的样子。是300多kb。不知道哪位大哥知道怎么播放这个arm文件。
问题暂时关闭
amr也是一种音频格式的缩写,多数支持录音的手机生成的录音文件均为此格式。(amr转换mp3最简单的方法):1、打开windows自带的录音机软件;2、打开暴风影音(或其他可以播放amr格式的软件),播放amr文件至完毕; 3、激活暴风影音软件界面,左手放在空格键上; 4、右手操作鼠标放在录音机软件的录音键(小红点)上; 5、空格键和鼠标同时按下,文件播放完毕的同时停止录音; 6、录音机软件,文件菜单,保存录音为WAV格式。 以上步骤为amr转换为wav格式。 然后将wav格式的文件转换为mp3就可以了。
一般自带音乐播放器就可以播放那个,你试试~
我精简到极致了。自带的删了。
。。。下个天天可以播放吧
本回答被提问者采纳
是不是播放器坏了 还是音响坏了
为您推荐:
其他类似问题
您可能关注的内容
arm的相关知识
等待您来回答Android提供了两个API用于实现录音功能:android.media.AudioRecord、android.media.MediaRecorder。
&&& 网上有很多谈论这两个类的资料。现在大致总结下:
1、AudioRecord
主要是实现边录边播(AudioRecord+AudioTrack)以及对音频的实时处理(如会说话的汤姆猫、语音)
优点:语音的实时处理,可以用代码实现各种音频的封装
缺点:输出是PCM语音数据,如果保存成音频文件,是不能够被播放器播放的,所以必须先写代码实现数据编码以及压缩
使用AudioRecord类录音,并实现WAV格式封装。录音20s,输出的音频文件大概为3.5M左右(已写测试代码)
2、MediaRecorder
已经集成了录音、编码、压缩等,支持少量的录音音频格式,大概有.aac(API = 16) .amr .3gp
优点:大部分以及集成,直接调用相关接口即可,代码量小
缺点:无法实时处理音频;输出的音频格式不是很多,例如没有输出mp3格式文件
使用MediaRecorder类录音,输出amr格式文件。录音20s,输出的音频文件大概为33K(已写测试代码)
3、音频格式比较
WAV格式:录音质量高,但是压缩率小,文件大
AAC格式:相对于mp3,AAC格式的音质更佳,文件更小;有损压缩;一般苹果或者Android SDK4.1.2(API 16)及以上版本支持播放
AMR格式:压缩比比较大,但相对其他的压缩格式质量比较差,多用于人声,通话录音
至于常用的mp3格式,使用MediaRecorder没有该视频格式输出。一些人的做法是使用AudioRecord录音,然后编码成wav格式,再转换成mp3格式
&&& 再贴上一些测试工程。
功能描述:
1、点击&录音WAV文件&,开始录音。录音完成后,生成文件/sdcard/FinalAudio.wav
2、点击&录音AMR文件&,开始录音。录音完成后,生成文件/sdcard/FinalAudio.amr
3、点击&停止录音&,停止录音,并显示录音输出文件以及该文件大小。
大致代码如下:
1、AudioRecord录音,封装成WAV格式.
package com.example.
import java.io.F
import java.io.FileInputS
import java.io.FileNotFoundE
import java.io.FileOutputS
import java.io.IOE
import android.media.AudioF
import android.media.AudioR
public class AudioRecordFunc {
// 缓冲区字节大小
private int bufferSizeInBytes = 0;
//AudioName裸音频数据文件 ,麦克风
private String AudioName = "";
//NewAudioName可播放的音频文件
private String NewAudioName = "";
private AudioRecord audioR
private boolean isRecord = false;// 设置正在录制的状态
private static AudioRecordFunc mI
private AudioRecordFunc(){
public synchronized static AudioRecordFunc getInstance()
if(mInstance == null)
mInstance = new AudioRecordFunc();
public int startRecordAndFile() {
//判断是否有外部存储设备sdcard
if(AudioFileFunc.isSdcardExit())
if(isRecord)
return ErrorCode.E_STATE_RECODING;
if(audioRecord == null)
creatAudioRecord();
audioRecord.startRecording();
// 让录制状态为true
isRecord = true;
// 开启音频文件写入线程
new Thread(new AudioRecordThread()).start();
return ErrorCode.SUCCESS;
return ErrorCode.E_NOSDCARD;
public void stopRecordAndFile() {
public long getRecordFileSize(){
return AudioFileFunc.getFileSize(NewAudioName);
private void close() {
if (audioRecord != null) {
System.out.println("stopRecord");
isRecord = false;//停止文件写入
audioRecord.stop();
audioRecord.release();//释放资源
audioRecord = null;
private void creatAudioRecord() {
// 获取音频文件路径
AudioName = AudioFileFunc.getRawFilePath();
NewAudioName = AudioFileFunc.getWavFilePath();
// 获得缓冲区字节大小
bufferSizeInBytes = AudioRecord.getMinBufferSize(AudioFileFunc.AUDIO_SAMPLE_RATE,
AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT);
// 创建AudioRecord对象
audioRecord = new AudioRecord(AudioFileFunc.AUDIO_INPUT, AudioFileFunc.AUDIO_SAMPLE_RATE,
AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes);
class AudioRecordThread implements Runnable {
public void run() {
writeDateTOFile();//往文件中写入裸数据
copyWaveFile(AudioName, NewAudioName);//给裸数据加上头文件
* 这里将数据写入文件,但是并不能播放,因为AudioRecord获得的音频是原始的裸音频,
* 如果需要播放就必须加入一些格式或者编码的头信息。但是这样的好处就是你可以对音频的 裸数据进行处理,比如你要做一个爱说话的TOM
* 猫在这里就进行音频的处理,然后重新封装 所以说这样得到的音频比较容易做一些音频的处理。
private void writeDateTOFile() {
// new一个byte数组用来存一些字节数据,大小为缓冲区大小
byte[] audiodata = new byte[bufferSizeInBytes];
FileOutputStream fos = null;
int readsize = 0;
File file = new File(AudioName);
if (file.exists()) {
file.delete();
fos = new FileOutputStream(file);// 建立一个可存取字节的文件
} catch (Exception e) {
e.printStackTrace();
while (isRecord == true) {
readsize = audioRecord.read(audiodata, 0, bufferSizeInBytes);
if (AudioRecord.ERROR_INVALID_OPERATION != readsize && fos!=null) {
fos.write(audiodata);
} catch (IOException e) {
e.printStackTrace();
if(fos != null)
fos.close();// 关闭写入流
} catch (IOException e) {
e.printStackTrace();
// 这里得到可播放的音频文件
private void copyWaveFile(String inFilename, String outFilename) {
FileInputStream in = null;
FileOutputStream out = null;
long totalAudioLen = 0;
long totalDataLen = totalAudioLen + 36;
long longSampleRate = AudioFileFunc.AUDIO_SAMPLE_RATE;
int channels = 2;
long byteRate = 16 * AudioFileFunc.AUDIO_SAMPLE_RATE * channels / 8;
byte[] data = new byte[bufferSizeInBytes];
in = new FileInputStream(inFilename);
out = new FileOutputStream(outFilename);
totalAudioLen = in.getChannel().size();
totalDataLen = totalAudioLen + 36;
WriteWaveFileHeader(out, totalAudioLen, totalDataLen,
longSampleRate, channels, byteRate);
while (in.read(data) != -1) {
out.write(data);
in.close();
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
* 这里提供一个头信息。插入这些信息就可以得到可以播放的文件。
* 为我为啥插入这44个字节,这个还真没深入研究,不过你随便打开一个wav
* 音频的文件,可以发现前面的头文件可以说基本一样哦。每种格式的文件都有
* 自己特有的头文件。
private void WriteWaveFileHeader(FileOutputStream out, long totalAudioLen,
long totalDataLen, long longSampleRate, int channels, long byteRate)
throws IOException {
byte[] header = new byte[44];
header[0] = 'R'; // RIFF/WAVE header
header[1] = 'I';
header[2] = 'F';
header[3] = 'F';
header[4] = (byte) (totalDataLen & 0xff);
header[5] = (byte) ((totalDataLen && 8) & 0xff);
header[6] = (byte) ((totalDataLen && 16) & 0xff);
header[7] = (byte) ((totalDataLen && 24) & 0xff);
header[8] = 'W';
header[9] = 'A';
header[10] = 'V';
header[11] = 'E';
header[12] = 'f'; // 'fmt ' chunk
header[13] = 'm';
header[14] = 't';
header[15] = ' ';
header[16] = 16; // 4 bytes: size of 'fmt ' chunk
header[17] = 0;
header[18] = 0;
header[19] = 0;
header[20] = 1; // format = 1
header[21] = 0;
header[22] = (byte)
header[23] = 0;
header[24] = (byte) (longSampleRate & 0xff);
header[25] = (byte) ((longSampleRate && 8) & 0xff);
header[26] = (byte) ((longSampleRate && 16) & 0xff);
header[27] = (byte) ((longSampleRate && 24) & 0xff);
header[28] = (byte) (byteRate & 0xff);
header[29] = (byte) ((byteRate && 8) & 0xff);
header[30] = (byte) ((byteRate && 16) & 0xff);
header[31] = (byte) ((byteRate && 24) & 0xff);
header[32] = (byte) (2 * 16 / 8); // block align
header[33] = 0;
header[34] = 16; // bits per sample
header[35] = 0;
header[36] = 'd';
header[37] = 'a';
header[38] = 't';
header[39] = 'a';
header[40] = (byte) (totalAudioLen & 0xff);
header[41] = (byte) ((totalAudioLen && 8) & 0xff);
header[42] = (byte) ((totalAudioLen && 16) & 0xff);
header[43] = (byte) ((totalAudioLen && 24) & 0xff);
out.write(header, 0, 44);
2、MediaRecorder录音,输出amr格式音频
package com.example.
import java.io.F
import java.io.IOE
import android.media.MediaR
public class MediaRecordFunc {
private boolean isRecord = false;
private MediaRecorder mMediaR
private MediaRecordFunc(){
private static MediaRecordFunc mI
public synchronized static MediaRecordFunc getInstance(){
if(mInstance == null)
mInstance = new MediaRecordFunc();
public int startRecordAndFile(){
//判断是否有外部存储设备sdcard
if(AudioFileFunc.isSdcardExit())
if(isRecord)
return ErrorCode.E_STATE_RECODING;
if(mMediaRecorder == null)
createMediaRecord();
mMediaRecorder.prepare();
mMediaRecorder.start();
// 让录制状态为true
isRecord = true;
return ErrorCode.SUCCESS;
}catch(IOException ex){
ex.printStackTrace();
return ErrorCode.E_UNKOWN;
return ErrorCode.E_NOSDCARD;
public void stopRecordAndFile(){
public long getRecordFileSize(){
return AudioFileFunc.getFileSize(AudioFileFunc.getAMRFilePath());
private void createMediaRecord(){
/* ①Initial:实例化MediaRecorder对象 */
mMediaRecorder = new MediaRecorder();
/* setAudioSource/setVedioSource*/
mMediaRecorder.setAudioSource(AudioFileFunc.AUDIO_INPUT);//设置麦克风
/* 设置输出文件的格式:THREE_GPP/MPEG-4/RAW_AMR/Default
* THREE_GPP(3gp格式,H263视频/ARM音频编码)、MPEG-4、RAW_AMR(只支持音频且音频编码要求为AMR_NB)
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
/* 设置音频文件的编码:AAC/AMR_NB/AMR_MB/Default */
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
/* 设置输出文件的路径 */
File file = new File(AudioFileFunc.getAMRFilePath());
if (file.exists()) {
file.delete();
mMediaRecorder.setOutputFile(AudioFileFunc.getAMRFilePath());
private void close(){
if (mMediaRecorder != null) {
System.out.println("stopRecord");
isRecord = false;
mMediaRecorder.stop();
mMediaRecorder.release();
mMediaRecorder = null;
3、其他文件
AudioFileFunc.java
package com.example.
import java.io.F
import android.media.MediaR
import android.os.E
public class AudioFileFunc {
//音频输入-麦克风
public final static int AUDIO_INPUT = MediaRecorder.AudioSource.MIC;
//采用频率
//44100是目前的标准,但是某些设备仍然支持2,11025
public final static int AUDIO_SAMPLE_RATE = 44100;
//44.1KHz,普遍使用的频率
//录音输出文件
private final static String AUDIO_RAW_FILENAME = "RawAudio.raw";
private final static String AUDIO_WAV_FILENAME = "FinalAudio.wav";
public final static String AUDIO_AMR_FILENAME = "FinalAudio.amr";
* 判断是否有外部存储设备sdcard
* @return true | false
public static boolean isSdcardExit(){
if (Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
return true;
return false;
* 获取麦克风输入的原始音频流文件路径
public static String getRawFilePath(){
String mAudioRawPath = "";
if(isSdcardExit()){
String fileBasePath = Environment.getExternalStorageDirectory().getAbsolutePath();
mAudioRawPath = fileBasePath+"/"+AUDIO_RAW_FILENAME;
return mAudioRawP
* 获取编码后的WAV格式音频文件路径
public static String getWavFilePath(){
String mAudioWavPath = "";
if(isSdcardExit()){
String fileBasePath = Environment.getExternalStorageDirectory().getAbsolutePath();
mAudioWavPath = fileBasePath+"/"+AUDIO_WAV_FILENAME;
return mAudioWavP
* 获取编码后的AMR格式音频文件路径
public static String getAMRFilePath(){
String mAudioAMRPath = "";
if(isSdcardExit()){
String fileBasePath = Environment.getExternalStorageDirectory().getAbsolutePath();
mAudioAMRPath = fileBasePath+"/"+AUDIO_AMR_FILENAME;
return mAudioAMRP
* 获取文件大小
* @param path,文件的绝对路径
public static long getFileSize(String path){
File mFile = new File(path);
if(!mFile.exists())
return -1;
return mFile.length();
4、其他文件
ErrorCode.java
package com.example.
import android.content.C
import android.content.res.Resources.NotFoundE
public class ErrorCode {
public final static int SUCCESS = 1000;
public final static int E_NOSDCARD = 1001;
public final static int E_STATE_RECODING = 1002;
public final static int E_UNKOWN = 1003;
public static String getErrorInfo(Context vContext, int vType) throws NotFoundException
switch(vType)
case SUCCESS:
return "success";
case E_NOSDCARD:
return vContext.getResources().getString(R.string.error_no_sdcard);
case E_STATE_RECODING:
return vContext.getResources().getString(R.string.error_state_record);
case E_UNKOWN:
return vContext.getResources().getString(R.string.error_unknown);
5、string.xml
&?xml version="1.0" encoding="utf-8"?&
&resources&
&string name="app_name"&AudioRecordTest&/string&
&string name="hello_world"&测试AudioRecord,实现录音功能&/string&
&string name="menu_settings"&Settings&/string&
&string name="view_record_wav"&录音WAV文件&/string&
&string name="view_record_amr"&录音AMR文件&/string&
&string name="view_stop"&停止录音&/string&
&string name="error_no_sdcard"&没有SD卡,无法存储录音数据&/string&
&string name="error_state_record"&正在录音中,请先停止录音&/string&
&string name="error_unknown"&无法识别的错误&/string&
&/resources&
6、主程序MainActivity
package com.example.
import android.app.A
import android.os.B
import android.os.H
import android.os.M
import android.util.L
import android.view.M
import android.view.V
import android.widget.B
import android.widget.TextV
public class MainActivity extends Activity {
private final static int FLAG_WAV = 0;
private final static int FLAG_AMR = 1;
private int mState = -1;
//-1:没再录制,0:录制wav,1:录制amr
private Button btn_record_
private Button btn_record_
private Button btn_
private TextV
private UIHandler uiH
private UIThread uiT
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewByIds();
setListeners();
public boolean onCreateOptionsMenu(Menu menu) {
// I this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
private void findViewByIds(){
btn_record_wav = (Button)this.findViewById(R.id.btn_record_wav);
btn_record_amr = (Button)this.findViewById(R.id.btn_record_amr);
btn_stop = (Button)this.findViewById(R.id.btn_stop);
txt = (TextView)this.findViewById(R.id.text);
private void setListeners(){
btn_record_wav.setOnClickListener(btn_record_wav_clickListener);
btn_record_amr.setOnClickListener(btn_record_amr_clickListener);
btn_stop.setOnClickListener(btn_stop_clickListener);
private void init(){
uiHandler = new UIHandler();
private Button.OnClickListener btn_record_wav_clickListener = new Button.OnClickListener(){
public void onClick(View v){
record(FLAG_WAV);
private Button.OnClickListener btn_record_amr_clickListener = new Button.OnClickListener(){
public void onClick(View v){
record(FLAG_AMR);
private Button.OnClickListener btn_stop_clickListener = new Button.OnClickListener(){
public void onClick(View v){
* 开始录音
* @param mFlag,0:录制wav格式,1:录音amr格式
private void record(int mFlag){
if(mState != -1){
Message msg = new Message();
Bundle b = new Bundle();// 存放数据
b.putInt("cmd",CMD_RECORDFAIL);
b.putInt("msg", ErrorCode.E_STATE_RECODING);
msg.setData(b);
uiHandler.sendMessage(msg); // 向Handler发送消息,更新UI
int mResult = -1;
switch(mFlag){
case FLAG_WAV:
AudioRecordFunc mRecord_1 = AudioRecordFunc.getInstance();
mResult = mRecord_1.startRecordAndFile();
case FLAG_AMR:
MediaRecordFunc mRecord_2 = MediaRecordFunc.getInstance();
mResult = mRecord_2.startRecordAndFile();
if(mResult == ErrorCode.SUCCESS){
uiThread = new UIThread();
new Thread(uiThread).start();
mState = mF
Message msg = new Message();
Bundle b = new Bundle();// 存放数据
b.putInt("cmd",CMD_RECORDFAIL);
b.putInt("msg", mResult);
msg.setData(b);
uiHandler.sendMessage(msg); // 向Handler发送消息,更新UI
* 停止录音
private void stop(){
if(mState != -1){
switch(mState){
case FLAG_WAV:
AudioRecordFunc mRecord_1 = AudioRecordFunc.getInstance();
mRecord_1.stopRecordAndFile();
case FLAG_AMR:
MediaRecordFunc mRecord_2 = MediaRecordFunc.getInstance();
mRecord_2.stopRecordAndFile();
if(uiThread != null){
uiThread.stopThread();
if(uiHandler != null)
uiHandler.removeCallbacks(uiThread);
Message msg = new Message();
Bundle b = new Bundle();// 存放数据
b.putInt("cmd",CMD_STOP);
b.putInt("msg", mState);
msg.setData(b);
uiHandler.sendMessageDelayed(msg,1000); // 向Handler发送消息,更新UI
mState = -1;
private final static int CMD_RECORDING_TIME = 2000;
private final static int CMD_RECORDFAIL = 2001;
private final static int CMD_STOP = 2002;
class UIHandler extends Handler{
public UIHandler() {
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
Log.d("MyHandler", "handleMessage......");
super.handleMessage(msg);
Bundle b = msg.getData();
int vCmd = b.getInt("cmd");
switch(vCmd)
case CMD_RECORDING_TIME:
int vTime = b.getInt("msg");
MainActivity.this.txt.setText("正在录音中,已录制:"+vTime+" s");
case CMD_RECORDFAIL:
int vErrorCode = b.getInt("msg");
String vMsg = ErrorCode.getErrorInfo(MainActivity.this, vErrorCode);
MainActivity.this.txt.setText("录音失败:"+vMsg);
case CMD_STOP:
int vFileType = b.getInt("msg");
switch(vFileType){
case FLAG_WAV:
AudioRecordFunc mRecord_1 = AudioRecordFunc.getInstance();
long mSize = mRecord_1.getRecordFileSize();
MainActivity.this.txt.setText("录音已停止.录音文件:"+AudioFileFunc.getWavFilePath()+"\n文件大小:"+mSize);
case FLAG_AMR:
MediaRecordFunc mRecord_2 = MediaRecordFunc.getInstance();
mSize = mRecord_2.getRecordFileSize();
MainActivity.this.txt.setText("录音已停止.录音文件:"+AudioFileFunc.getAMRFilePath()+"\n文件大小:"+mSize);
class UIThread implements Runnable {
int mTimeMill = 0;
boolean vRun = true;
public void stopThread(){
vRun = false;
public void run() {
while(vRun){
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
mTimeMill ++;
Log.d("thread", "mThread........"+mTimeMill);
Message msg = new Message();
Bundle b = new Bundle();// 存放数据
b.putInt("cmd",CMD_RECORDING_TIME);
b.putInt("msg", mTimeMill);
msg.setData(b);
MainActivity.this.uiHandler.sendMessage(msg); // 向Handler发送消息,更新UI
阅读(...) 评论() &

我要回帖

更多关于 音频裁剪工具 的文章

 

随机推荐