Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

support free record mp3 amr wav aac format可以录制android ios兼容的aac mp3格式切换录制格式也支持体积极少的amr格式,只需要改变工厂方法改变一句话就能实现,和iOS不撕逼录音,这是一个通用解决方案,你值得拥有!

NotificationsYou must be signed in to change notification settings

lozn00/recordutil

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

图片演示

演示图片地址

使用方法

gradle

 compile 'cn.qssq666:recordutil:0.1'//回调duration由秒改成毫秒

maven

<dependency>  <groupId>cn.qssq666</groupId>  <artifactId>recordutil</artifactId>  <version>0.2</version>  <type>pom</type></dependency>

支持录制amr,wav,mp3,aac,只需要改变工厂方法即可,都是一个抽象实现,因此用户轻松切换解决boss的变动需求。提供了如下管理器AACMediaRecorderManager

AmrRecorderManager

MP3RecordManager

Mp3RecordFromWavManagerWavRecordManager

建议使用工厂的方式,这样切换录音格式只需要改一句工厂代码就行。RecordFactory

如果要拿到具体的MediaRecorder 类 比如Amr的, 可以直接强转AmrRecorderManager 然后 getMediaRecorder()

工厂返回的录音接口类 接口类已被上面4个音频管理器类实现,可以直接进行强转拿如果要拿到具体的MediaRecorder 也可以直接从工厂的getInternAudioRecord()返回的Object对象强转具体的AudioRecord/MediaRecorder对象。

public interface RecordManagerI {    public boolean startRecordCreateFile(int stopTime) throws IOException;    public boolean stopRecord();    public void setOnTimeSecondChanage(OnTimeSecondChanage onTimeSecondChanage);    public void setSoundAmplitudeListenr(SoundAmplitudeListenr soundAmplitudeListenr);    public void setOnTimeOutStopListener(RecordManagerI.OnTimeOutStopListener onTimeOutStopListener);    public boolean isRecordIng();    public int getCurrenttime();    public File getFile();    public interface SoundAmplitudeListenr {        public void amplitude(int amplitude);    }    public interface OnTimeOutStopListener {        void onStop();    }    /**     * 当前流逝的时间     */    public interface OnTimeSecondChanage {        void onSecondChnage(int duration);    }}

另外 需要注意的是 监听录制声音高低setSoundAmplitudeListenr改变某些格式不支持如mp3格式的直接录制。如果你很牛比你可以做这件事情,我已经封装的很好了,基于我这个基础扩展还是很简单的哈。

如果用户要自定义临时生成的文件名已经产生的路径,可以 在Application创建的时候设置一下方法即可。如果返回的文件名是空,则表示该方法不需要改动,这个方法是静态的哈。

 MediaDirectoryUtils.setMediaManagerProvider(new MediaDirectoryUtils.MediaManagerProvider() {             @Override             public File getTempCacheWavFileName() {                 return null;             }              @Override             public File getTempAmrFileName() {                 return null;             }              @Override             public File getTempMp3FileName() {                 return null;             }              @Override             public File getTempAACFileName() {                 return null;             }              @Override             public File getTempCachePcmFileName() {                 return null;             }              @Override             public File getCachePath() {                 return null;//存储目录可以自定义逻辑,我这里是磁盘的某个文件夹             }              @Override             public String productFileName(String postfix) {                 return null;//这里是控制文件名生成格式 某些服务器端比较变态让你们这边修改             }         });

demo中部分代码采用工厂模式轻松切换任意录制格式 RecordFactory类提供了5种录音姿势封装的演示

`    public RecordManagerI getRecordManager() {         if (recordManager == null) { //                    recordManager = AudioManager.isErrorLoadSo() ? RecordFactory.getAAcRocrdInstance() : RecordFactory.getMp3RecordInstance();              switch (mediaType) {                 case AAC:                     recordManager = RecordFactory.getAAcRocrdInstance();                     break;                 case WAV:                     recordManager = RecordFactory.getWavRecordInstance();                     break;                 case MP3:                     recordManager = RecordFactory.getMp3RecordInstance();                     break;                 case WAV_TO_MP3:                     recordManager = RecordFactory.getWavRecordMp3OutInstance();                     break;                 case AMR:                     recordManager = RecordFactory.getAmrRocrdInstance();                     break;             }             recordManager = AudioManager.isErrorLoadSo() ? RecordFactory.getAAcRocrdInstance() : RecordFactory.getMp3RecordInstance();             recordManager.setOnTimeSecondChanage(new RecordManagerI.OnTimeSecondChanage() {                 @Override                 public void onSecondChnage(int duration) {                     int time = duration * 1000;                     String s = generateTime(time);                     tvTitle.setText("" + s + ",time:" + time);                     Log.w(TAG, "" + s);                     mDuration = duration;                 }             });             recordManager.setOnTimeOutStopListener(new RecordManagerI.OnTimeOutStopListener() {                 @Override                 public void onStop() {                     mAudioFile = recordManager.getFile();                     tvPath.setText("audioPth:" + (mAudioFile == null ? null : mAudioFile.getAbsolutePath()));                     File tempCacheMp3FileName = MediaDirectoryUtils.getTempMp3FileName();                     try {                         tempCacheMp3FileName.createNewFile();                     } catch (IOException e) {                         e.printStackTrace();                     }                      setRecordState(false);                 }             });         }         return recordManager;     }

其它注意事项

混淆问题

m3p录制使用了jni 因此要保持这个不能被混淆

-keep class cn.qssq666.audio.AudioManager{*;}

如果完全不需要mp3录制android节点加上

packagingOptions {        exclude "lib/arm64-v8a/libmp3lame.so"        exclude "lib/armeabi-v7a/libmp3lame.so"        exclude "lib/x86/libmp3lame.so"        exclude "lib/x86_64/libmp3lame.so"        exclude "lib/mips/libmp3lame.so"        exclude "lib/mips64/libmp3lame.so"    }
<!-- -libraryjars ../XXX(此处为library名称)/src/main/jniLibs/x86/xxxxx.so -->

关于平台so优化问题.

建议设置为一个so,这样可以节省不少体积

  ndk {            //APP的build.gradle设置支持的SO库架构            abiFilters 'armeabi-v7a'        }

About

support free record mp3 amr wav aac format可以录制android ios兼容的aac mp3格式切换录制格式也支持体积极少的amr格式,只需要改变工厂方法改变一句话就能实现,和iOS不撕逼录音,这是一个通用解决方案,你值得拥有!

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp