{"id":17978767,"url":"https://github.com/jessyancoding/audiomanagersdk","last_synced_at":"2025-08-30T17:03:59.985Z","repository":{"id":122734852,"uuid":"66417247","full_name":"JessYanCoding/AudioManagerSDK","owner":"JessYanCoding","description":"智播项目(应用场景)专门用于处理录音逻辑的SDK","archived":false,"fork":false,"pushed_at":"2017-07-02T11:21:18.000Z","size":129,"stargazers_count":56,"open_issues_count":0,"forks_count":13,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-08-30T17:02:41.154Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JessYanCoding.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-08-24T01:23:29.000Z","updated_at":"2023-03-22T07:42:16.000Z","dependencies_parsed_at":null,"dependency_job_id":"d5dd3c6a-4ab1-4335-a687-73d4b38f7b36","html_url":"https://github.com/JessYanCoding/AudioManagerSDK","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JessYanCoding/AudioManagerSDK","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JessYanCoding%2FAudioManagerSDK","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JessYanCoding%2FAudioManagerSDK/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JessYanCoding%2FAudioManagerSDK/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JessYanCoding%2FAudioManagerSDK/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JessYanCoding","download_url":"https://codeload.github.com/JessYanCoding/AudioManagerSDK/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JessYanCoding%2FAudioManagerSDK/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272878319,"owners_count":25008336,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-30T02:00:09.474Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-29T17:35:04.051Z","updated_at":"2025-08-30T17:03:59.927Z","avatar_url":"https://github.com/JessYanCoding.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AudioManager SDK\n## Introduction\n `AudioManager`专注于录音相关逻辑的处理，目前举手发言场景和点名发言场景已经使用`AudioManager`，后续有其他场景要使用到录音相关功能都应使用此类\n## Dev tips\n* `AudioManager`独立于举手发言场景，它不与举手发言场景耦合，唯一与举手场景耦合的地方时录音结束后发送消息给主播，每个场景发送的逻辑不一样，所以采用接口的方式(post interface)，让调用者实现，此场景下由`RaiseManager`实现.\n\n* 因为录音相关逻辑涉及到上传和下载的功能，`AudioManager`专注于录音处理，由于网络框架每个项目都有自己独有的一套，且庞大，所以调用者通过`HttpHelper`接口，自己实现上传下载的功能,这样保证了扩展又保证了**SDK**的大小.\n* `AudioInfo`表示录音的消息，里面封装有基本的信息，为了扩展，`AudioManager`可以传入一个继承于`AudioInfo`的范型，这样就可以在回调中收到自己定义的录音消息对象，可以储存一些自己定义的信息. \n\n## 参数及方法介绍:\n### 构建`AudioManager `需要传入的参数  \n * 必要参数\n  * **Context**: 上下文\n  * **HttpHelper**: 用于上传下载录音的接口，每个应用场景必须自己实现 \n * 非必要参数\n  * **MaxRecordTime**: 单次录音最大录制时间，超时会在AudioListener中回调\n  * **MinRecordTime**: 单次录音最小录音时间，超时会在AudioListener中回调 \n  * **AudioListener**: 录音时的一些信息回调(与MaxRecordTime和MinRecordTime有关)\n  * **StatusListener**: 对于录音信息的一些状态回调(录音上传中，播放中，下载失败...)\n\n### 主要方法\n * **startRecord**: 开始录制语音\n * **stopRecord**: 停止录制语音，将当前录制的语音自动加入到队列中\n * **cancel**: 取消录制\n * **startUpload**: 开始上传录音，指定上传某个录音，也可以自动取队列的首个录音上传，如果上传失败他会在后台自动续传\n * **download**: 下载指定的录音\n * **addSpeech**: `AudioManager `自己管理一个用于展示到**UI**的**List**,此方法为添加到此列表\n * **getSpeechList**: 获得用于展示到**UI**的**List**，比如给**RecycleView**使用\n * **play**: 播放录音,内部有一个队列，如果在一个录音播放完之前被调用多次，则后面加入的录音都在队列中，等待播放，播放完上一个录音会检测队列，有等待的录音则继续播放下一个\n * **palySingle**: 播放录音，内部没有队列，调用时如果之前的录音还没播放完则停止之前的录音，立即开始现在录音的播放\n * **stopPlay**: 停止播放所有录音\n * **release**: 释放资源\n\n### 示例代码\n``` java    \n    mAudioManager = AudioManager\n                .builder()\n                .httpHelper(new OkHttpHelper(getActivity()))\n                .minRecordTime(2, TimeUnit.SECONDS)\n                .with(getActivity())\n                .addAudioListener(AudioListener)\n                .addStatusListener(StatusListener)\n                .build();\n```\n\n## 详解\n### AudioInfo structure  \n\nField       | Description\n:----------:|:-------------:\nfilePath    | 录音文件本地路径\nurl         | 上传到服务器的url地址\nrecordTime  | 录制的时间单位秒\nctime       | 创建的时间单位毫秒，作为此录音的唯一码\nstatus      | 0.正常状态 1.下载中 2.播放失败 3.播放中 4.播放暂停\n\n### AudioListener Introduction\nMethod               |  Description\n:-------------------:|:-------------:\nonRecordTooShort     | 单次录制时间少于MinRecordTime，则调用此回调\nonRecordTooLong      | 单次录制时间大于MaxRecordTime，则调用此回调\nonVoiceAmplitudeLevel| 在录制时会执行此回调，会提供声音的大小，可以做一些**UI**操作\n\n### StatusListener Introduction\n录音状态信息有变化则会调用此回调(如录音下载成功，失败...)，回调提供一个继承于`AudioInfo`的范型(可自己指定，便于存放一些自定义消息)以及一个状态码，告诉开发者当前录音的状态\n\nStatusCode | Description\n:---------:|:--------------:\n0          | 此录音下载中\n1          | 此录音下载失败\n2          | 此录音下载成功\n3          | 此录音播放中\n4          | 此录音播放失败\n5          | 此录音播放完成\n6          | 此录音被加入到列表中\n7          | 此录音在播放中被暂停\n\n### Post Interface   \n所有应用场景必须实现它，上传成功后便会调用它发送im消息，每个场景自定义自己的逻辑   \n\n### Executor Interface\n此接口是处理自动续传逻辑，即上传失败后，后台保持队列继续上传直到成功，默认实现为HttpExecutor,可以实现`Executor Interface`自定义自己的自动续传逻辑.   \n\n### HttpHelper Interface \n此接口是上传下载录音的接口，没有默认实现，如果要想上传下载录音必须，自己实现，原因上面已经提及 \n\n### Audio Interface \n`AudioManager`就实现于此接口，如果你觉得此录音管理类写的太渣了，你完全可以实现此接口重新写相关的逻辑，完全不用改之前的所有代码，此**SDK**大量使用接口处理扩展和低耦合，后面的场景应该是用此开发模式  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjessyancoding%2Faudiomanagersdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjessyancoding%2Faudiomanagersdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjessyancoding%2Faudiomanagersdk/lists"}