Thanks to visit codestin.com
Credit goes to Github.com

Skip to content

supoert free record mp3 amr wav aac format可以录制android ios兼容的aac mp3格式切换录制格式只需要一句代码,和iOS不撕逼

Notifications You must be signed in to change notification settings

dpqb/recordutil

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 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

Mp3RecordFromWavManager WavRecordManager

建议使用工厂的方式,这样切换录音格式只需要改一句工厂代码就行。 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;
     }

About

supoert free record mp3 amr wav aac format可以录制android ios兼容的aac mp3格式切换录制格式只需要一句代码,和iOS不撕逼

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%