{"id":19720895,"url":"https://github.com/piasy/rxandroidaudio","last_synced_at":"2025-05-15T16:05:54.619Z","repository":{"id":55462584,"uuid":"52341773","full_name":"Piasy/RxAndroidAudio","owner":"Piasy","description":"Maybe the most robust Android Audio encapsulation library, with partial Rx support.","archived":false,"fork":false,"pushed_at":"2021-05-05T02:20:53.000Z","size":351,"stargazers_count":1567,"open_issues_count":11,"forks_count":233,"subscribers_count":51,"default_branch":"master","last_synced_at":"2025-04-07T21:13:53.950Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://blog.piasy.com/2016/02/24/Robust-Android-Audio-encapsulation/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Piasy.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-02-23T08:01:58.000Z","updated_at":"2025-03-07T05:32:20.000Z","dependencies_parsed_at":"2022-08-15T00:50:45.891Z","dependency_job_id":null,"html_url":"https://github.com/Piasy/RxAndroidAudio","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Piasy%2FRxAndroidAudio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Piasy%2FRxAndroidAudio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Piasy%2FRxAndroidAudio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Piasy%2FRxAndroidAudio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Piasy","download_url":"https://codeload.github.com/Piasy/RxAndroidAudio/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254374427,"owners_count":22060611,"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","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-11-11T23:12:52.238Z","updated_at":"2025-05-15T16:05:54.599Z","avatar_url":"https://github.com/Piasy.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RxAndroidAudio\n\n\u003cimg src=\"logotype primary.png\" width=\"60%\" height=\"60%\" /\u003e\n\nAndroid Audio encapsulation library, with part Rx support.\n\n[ ![Download](https://api.bintray.com/packages/piasy/maven/RxAndroidAudio/images/download.svg) ](https://bintray.com/piasy/maven/RxAndroidAudio/_latestVersion) [![Build Status](https://travis-ci.org/Piasy/RxAndroidAudio.svg?branch=master)](https://travis-ci.org/Piasy/RxAndroidAudio)\n\n## Usage\n\n### About lambda support\n\nThis library use lambda expression, since `com.android.tools.build:gradle:2.4.0`, there is native support for lambda, so I use it instead of jack support or RetroLambda, if you have lambda issue during build, please upgrade your gradle-android into 2.4.0+, or use 1.5.1 of this library, thanks!\n\n### Add to gradle dependency of your module build.gradle\n\n```gradle\nallprojects {\n    repositories {\n        mavenCentral()\n    }\n}\n\ndependencies {\n    implementation 'com.github.piasy:rxandroidaudio:1.7.0'\n    implementation 'com.github.piasy:AudioProcessor:1.7.0'\n}\n```\n\n### Use in code\n\n#### Record to file\n\n```java\nmAudioRecorder = AudioRecorder.getInstance();\nmAudioFile = new File(\n        Environment.getExternalStorageDirectory().getAbsolutePath() +\n                File.separator + System.nanoTime() + \".file.m4a\");\nmAudioRecorder.prepareRecord(MediaRecorder.AudioSource.MIC,\n        MediaRecorder.OutputFormat.MPEG_4, MediaRecorder.AudioEncoder.AAC,\n        mAudioFile);\nmAudioRecorder.startRecord();\n// ...\nmAudioRecorder.stopRecord();\n```\n\n**Note**: If you record a aac file, the sound quality will be poor if the sample rate and encoding\nbit rate is low, the sound quality will increase when you set a bigger sample rate and encoding\nbit rate, but as the sound quality improve, the recorded file size will also increase.\n\n#### Play a file\n\nWith PlayConfig, to set audio file or audio resource, set volume, or looping:\n\n```java\nmRxAudioPlayer.play(PlayConfig.file(audioFile).looping(true).build())\n        .subscribeOn(Schedulers.io())\n        .subscribe(new Observer\u003cBoolean\u003e() {\n               @Override\n               public void onSubscribe(final Disposable disposable) {\n\n               }\n\n               @Override\n               public void onNext(final Boolean aBoolean) {\n                    // prepared\n               }\n\n               @Override\n               public void onError(final Throwable throwable) {\n\n               }\n\n               @Override\n               public void onComplete() {\n                    // play finished\n                    // NOTE: if looping, the Observable will never finish, you need stop playing\n                    // onDestroy, otherwise, memory leak will happen!\n               }\n           });\n```\n\n#### Full example of PlayConfig\n\n```java\nPlayConfig.file(audioFile) // play a local file\n    //.res(getApplicationContext(), R.raw.audio_record_end) // or play a raw resource\n    .looping(true) // loop or not\n    .leftVolume(1.0F) // left volume\n    .rightVolume(1.0F) // right volume\n    .build(); // build this config and play!\n```\n\n#### Record a stream\n\n```java\nmOutputFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +\n        File.separator + System.nanoTime() + \".stream.m4a\");\nmOutputFile.createNewFile();\nmFileOutputStream = new FileOutputStream(mOutputFile);\nmStreamAudioRecorder.start(new StreamAudioRecorder.AudioDataCallback() {\n    @Override\n    public void onAudioData(byte[] data, int size) {\n        if (mFileOutputStream != null) {\n            try {\n                mFileOutputStream.write(data, 0, size);\n            } catch (IOException e) {\n                e.printStackTrace();\n            }\n        }\n    }\n\n    @Override\n    public void onError() {\n        mBtnStart.post(new Runnable() {\n            @Override\n            public void run() {\n                Toast.makeText(getApplicationContext(), \"Record fail\",\n                        Toast.LENGTH_SHORT).show();\n                mBtnStart.setText(\"Start\");\n                mIsRecording = false;\n            }\n        });\n    }\n});\n```\n\n#### Play a stream\n\n```java\nObservable.just(mOutputFile).subscribeOn(Schedulers.io()).subscribe(new Action1\u003cFile\u003e() {\n    @Override\n    public void call(File file) {\n        try {\n            mStreamAudioPlayer.init();\n            FileInputStream inputStream = new FileInputStream(file);\n            int read;\n            while ((read = inputStream.read(mBuffer)) \u003e 0) {\n                mStreamAudioPlayer.play(mBuffer, read);\n            }\n            inputStream.close();\n            mStreamAudioPlayer.release();\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n    }\n});\n```\n\n#### Change the sound effect in stream mode\n\n``` java\nmStreamAudioPlayer.play(\n    mAudioProcessor.process(mRatio, mBuffer, StreamAudioRecorder.DEFAULT_SAMPLE_RATE),\n    len);\n```\n\nSee [full example](https://github.com/Piasy/RxAndroidAudio/tree/master/app) for more details.\n\n[Download demo apk](http://fir.im/RXA).\n\n## Contribution are welcome\n\n+ Please follow [my code style based on SquareAndroid](https://github.com/Piasy/java-code-styles)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpiasy%2Frxandroidaudio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpiasy%2Frxandroidaudio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpiasy%2Frxandroidaudio/lists"}