Skip to content

Commit ad1a6bb

Browse files
committed
0.1.0
1 parent c922f7e commit ad1a6bb

11 files changed

Lines changed: 149 additions & 39 deletions

File tree

README.md

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# AndroidAudioRecorder
44

5-
> A fancy audio recorder for Android. It supports `WAV` format.
5+
> A fancy audio recorder for Android. It supports `WAV` format at 48kHz.
66
77
![Screenshots](https://raw.githubusercontent.com/adrielcafe/AndroidAudioRecorder/master/demo.gif)
88

@@ -22,9 +22,17 @@ String filePath = Environment.getExternalStorageDirectory() + "/recorded_audio.w
2222
int color = getResources().getColor(R.color.colorPrimaryDark);
2323
int requestCode = 0;
2424
AndroidAudioRecorder.with(this)
25+
// Required
2526
.setFilePath(filePath)
2627
.setColor(color)
2728
.setRequestCode(requestCode)
29+
30+
// Optional
31+
.setSource(AudioSource.MIC)
32+
.setChannel(AudioChannel.STEREO)
33+
.setSampleRate(AudioSampleRate.HZ_48000)
34+
35+
// Start recording
2836
.record();
2937
```
3038

@@ -53,7 +61,7 @@ repositories {
5361
}
5462
5563
dependencies {
56-
compile 'com.github.adrielcafe:AndroidAudioRecorder:0.0.9'
64+
compile 'com.github.adrielcafe:AndroidAudioRecorder:0.1.0'
5765
}
5866
```
5967

@@ -63,6 +71,7 @@ dependencies {
6371
- [X] Wave visualization based on this [player concept](https://dribbble.com/shots/2369760-Player-Concept)
6472
- [X] Play recorded audio
6573
- [X] Pause recording
74+
- [X] Configure audio source (Mic/Camcorder), channel (Stereo/Mono) and sample rate (8kHz to 48kHz)
6675
- [ ] Skip silence
6776
- [ ] Animations
6877
- [ ] Landscape screen orientation (only supports portrait at the moment)

app/src/main/java/cafe/adriel/androidaudiorecorder/example/MainActivity.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
import android.widget.Toast;
1111

1212
import cafe.adriel.androidaudiorecorder.AndroidAudioRecorder;
13-
import cafe.adriel.androidaudiorecorder.Util;
13+
import cafe.adriel.androidaudiorecorder.model.AudioChannel;
14+
import cafe.adriel.androidaudiorecorder.model.AudioSampleRate;
15+
import cafe.adriel.androidaudiorecorder.model.AudioSource;
1416

1517
public class MainActivity extends AppCompatActivity {
1618
private static final String AUDIO_FILE_PATH = Environment.getExternalStorageDirectory() + "/recorded_audio.wav";
@@ -44,9 +46,17 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
4446

4547
public void recordAudio(View v) {
4648
AndroidAudioRecorder.with(this)
49+
// Required
4750
.setFilePath(AUDIO_FILE_PATH)
4851
.setColor(getResources().getColor(R.color.recorder_bg))
4952
.setRequestCode(RECORD_AUDIO)
53+
54+
// Optional
55+
.setSource(AudioSource.MIC)
56+
.setChannel(AudioChannel.STEREO)
57+
.setSampleRate(AudioSampleRate.HZ_48000)
58+
59+
// Start recording
5060
.record();
5161
}
5262

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package cafe.adriel.androidaudiorecorder.example;
2+
3+
import android.app.Activity;
4+
import android.content.pm.PackageManager;
5+
import android.support.v4.app.ActivityCompat;
6+
import android.support.v4.content.ContextCompat;
7+
8+
public class Util {
9+
10+
public static void requestPermission(Activity activity, String permission) {
11+
if (ContextCompat.checkSelfPermission(activity, permission)
12+
!= PackageManager.PERMISSION_GRANTED) {
13+
ActivityCompat.requestPermissions(activity, new String[]{permission}, 0);
14+
}
15+
}
16+
17+
}

lib/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ android {
1919
}
2020

2121
dependencies {
22-
compile 'com.android.support:appcompat-v7:24.1.1'
22+
compile 'com.android.support:appcompat-v7:24.2.1'
2323
compile 'com.kailashdabhi:om-recorder:1.1.0'
24-
compile 'com.cleveroad:audiovisualization:0.9.4'
24+
compile 'com.cleveroad:audiovisualization:1.0.0'
2525
}

lib/src/main/AndroidManifest.xml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@
33
xmlns:android="http://schemas.android.com/apk/res/android"
44
package="cafe.adriel.androidaudiorecorder">
55

6-
<application
7-
android:label="@string/app_name"
8-
android:allowBackup="true">
6+
<application android:label="@string/app_name">
97
<activity
108
android:name=".AudioRecorderActivity"
119
android:theme="@style/Theme.AppCompat"

lib/src/main/java/cafe/adriel/androidaudiorecorder/AndroidAudioRecorder.java

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,24 @@
55
import android.graphics.Color;
66
import android.os.Environment;
77

8+
import cafe.adriel.androidaudiorecorder.model.AudioChannel;
9+
import cafe.adriel.androidaudiorecorder.model.AudioSampleRate;
10+
import cafe.adriel.androidaudiorecorder.model.AudioSource;
11+
812
public class AndroidAudioRecorder {
9-
public static final String EXTRA_FILE_PATH = "filePath";
10-
public static final String EXTRA_COLOR = "color";
13+
14+
protected static final String EXTRA_FILE_PATH = "filePath";
15+
protected static final String EXTRA_COLOR = "color";
16+
protected static final String EXTRA_SOURCE = "source";
17+
protected static final String EXTRA_CHANNEL = "channel";
18+
protected static final String EXTRA_SAMPLE_RATE = "sampleRate";
1119

1220
private Activity activity;
1321

1422
private String filePath = Environment.getExternalStorageDirectory() + "/recorded_audio.wav";
23+
private AudioSource source = AudioSource.MIC;
24+
private AudioChannel channel = AudioChannel.STEREO;
25+
private AudioSampleRate sampleRate = AudioSampleRate.HZ_44100;
1526
private int color = Color.parseColor("#546E7A");
1627
private int requestCode = 0;
1728

@@ -38,10 +49,28 @@ public AndroidAudioRecorder setRequestCode(int requestCode) {
3849
return this;
3950
}
4051

52+
public AndroidAudioRecorder setSource(AudioSource source) {
53+
this.source = source;
54+
return this;
55+
}
56+
57+
public AndroidAudioRecorder setChannel(AudioChannel channel) {
58+
this.channel = channel;
59+
return this;
60+
}
61+
62+
public AndroidAudioRecorder setSampleRate(AudioSampleRate sampleRate) {
63+
this.sampleRate = sampleRate;
64+
return this;
65+
}
66+
4167
public void record() {
4268
Intent intent = new Intent(activity, AudioRecorderActivity.class);
4369
intent.putExtra(EXTRA_FILE_PATH, filePath);
4470
intent.putExtra(EXTRA_COLOR, color);
71+
intent.putExtra(EXTRA_SOURCE, source);
72+
intent.putExtra(EXTRA_CHANNEL, channel);
73+
intent.putExtra(EXTRA_SAMPLE_RATE, sampleRate);
4574
activity.startActivityForResult(intent, requestCode);
4675
}
4776

lib/src/main/java/cafe/adriel/androidaudiorecorder/AudioRecorderActivity.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
import java.util.Timer;
2121
import java.util.TimerTask;
2222

23+
import cafe.adriel.androidaudiorecorder.model.AudioChannel;
24+
import cafe.adriel.androidaudiorecorder.model.AudioSampleRate;
25+
import cafe.adriel.androidaudiorecorder.model.AudioSource;
2326
import omrecorder.AudioChunk;
2427
import omrecorder.OmRecorder;
2528
import omrecorder.PullTransport;
@@ -28,13 +31,16 @@
2831
public class AudioRecorderActivity extends AppCompatActivity
2932
implements PullTransport.OnAudioChunkPulledListener, MediaPlayer.OnCompletionListener {
3033

34+
private String filePath;
35+
private AudioSource source;
36+
private AudioChannel channel;
37+
private AudioSampleRate sampleRate;
38+
private int color;
39+
3140
private MediaPlayer player;
3241
private Recorder recorder;
3342
private VisualizerHandler visualizerHandler;
3443

35-
private String filePath;
36-
private int color;
37-
3844
private Timer timer;
3945
private MenuItem saveMenuItem;
4046
private int recorderSecondsElapsed;
@@ -56,9 +62,15 @@ protected void onCreate(Bundle savedInstanceState) {
5662

5763
if(savedInstanceState != null) {
5864
filePath = savedInstanceState.getString(AndroidAudioRecorder.EXTRA_FILE_PATH);
65+
source = (AudioSource) savedInstanceState.getSerializable(AndroidAudioRecorder.EXTRA_SOURCE);
66+
channel = (AudioChannel) savedInstanceState.getSerializable(AndroidAudioRecorder.EXTRA_CHANNEL);
67+
sampleRate = (AudioSampleRate) savedInstanceState.getSerializable(AndroidAudioRecorder.EXTRA_SAMPLE_RATE);
5968
color = savedInstanceState.getInt(AndroidAudioRecorder.EXTRA_COLOR);
6069
} else {
6170
filePath = getIntent().getStringExtra(AndroidAudioRecorder.EXTRA_FILE_PATH);
71+
source = (AudioSource) getIntent().getSerializableExtra(AndroidAudioRecorder.EXTRA_SOURCE);
72+
channel = (AudioChannel) getIntent().getSerializableExtra(AndroidAudioRecorder.EXTRA_CHANNEL);
73+
sampleRate = (AudioSampleRate) getIntent().getSerializableExtra(AndroidAudioRecorder.EXTRA_SAMPLE_RATE);
6274
color = getIntent().getIntExtra(AndroidAudioRecorder.EXTRA_COLOR, Color.BLACK);
6375
}
6476

@@ -248,7 +260,7 @@ private void resumeRecording() {
248260
timerView.setText("00:00:00");
249261

250262
recorder = OmRecorder.wav(
251-
new PullTransport.Default(Util.getMic(), AudioRecorderActivity.this),
263+
new PullTransport.Default(Util.getMic(source, channel, sampleRate), AudioRecorderActivity.this),
252264
new File(filePath));
253265
}
254266
recorder.resumeRecording();

lib/src/main/java/cafe/adriel/androidaudiorecorder/Util.java

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,34 @@
11
package cafe.adriel.androidaudiorecorder;
22

3-
import android.app.Activity;
4-
import android.content.pm.PackageManager;
53
import android.graphics.Color;
64
import android.media.AudioFormat;
7-
import android.media.MediaRecorder;
85
import android.os.Handler;
9-
import android.support.v4.app.ActivityCompat;
10-
import android.support.v4.content.ContextCompat;
116

12-
import omrecorder.AudioSource;
7+
import cafe.adriel.androidaudiorecorder.model.AudioChannel;
8+
import cafe.adriel.androidaudiorecorder.model.AudioSampleRate;
9+
import cafe.adriel.androidaudiorecorder.model.AudioSource;
10+
1311

1412
public class Util {
1513
private static final Handler HANDLER = new Handler();
16-
private static final int AUDIO_FREQUENCY = 44100;
1714

1815
private Util() {
1916
}
2017

21-
public static void requestPermission(Activity activity, String permission) {
22-
if (ContextCompat.checkSelfPermission(activity, permission)
23-
!= PackageManager.PERMISSION_GRANTED) {
24-
ActivityCompat.requestPermissions(activity, new String[]{permission}, 0);
25-
}
26-
}
27-
2818
public static void wait(int millis, Runnable callback){
2919
HANDLER.postDelayed(callback, millis);
3020
}
3121

32-
public static AudioSource getMic() {
33-
return new AudioSource.Smart(
34-
MediaRecorder.AudioSource.MIC,
22+
public static omrecorder.AudioSource getMic(AudioSource source,
23+
AudioChannel channel,
24+
AudioSampleRate sampleRate) {
25+
return new omrecorder.AudioSource.Smart(
26+
source.getSource(),
3527
AudioFormat.ENCODING_PCM_16BIT,
36-
AudioFormat.CHANNEL_IN_STEREO,
37-
AUDIO_FREQUENCY);
28+
channel.getChannel(),
29+
sampleRate.getSampleRate());
3830
}
3931

40-
/**
41-
* Function to check brightness of background color
42-
* @param color
43-
* @return true if color is bright
44-
*/
4532
public static boolean isBrightColor(int color) {
4633
if(android.R.color.transparent == color) {
4734
return true;
@@ -51,7 +38,6 @@ public static boolean isBrightColor(int color) {
5138
rgb[0] * rgb[0] * 0.241 +
5239
rgb[1] * rgb[1] * 0.691 +
5340
rgb[2] * rgb[2] * 0.068);
54-
//color is bright
5541
return brightness >= 200;
5642
}
5743

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package cafe.adriel.androidaudiorecorder.model;
2+
3+
import android.media.AudioFormat;
4+
5+
public enum AudioChannel {
6+
STEREO,
7+
MONO;
8+
9+
public int getChannel(){
10+
switch (this){
11+
case MONO:
12+
return AudioFormat.CHANNEL_IN_MONO;
13+
default:
14+
return AudioFormat.CHANNEL_IN_STEREO;
15+
}
16+
}
17+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package cafe.adriel.androidaudiorecorder.model;
2+
3+
public enum AudioSampleRate {
4+
HZ_48000,
5+
HZ_44100,
6+
HZ_32000,
7+
HZ_22050,
8+
HZ_16000,
9+
HZ_11025,
10+
HZ_8000;
11+
12+
public int getSampleRate(){
13+
return Integer.parseInt(name().replace("HZ_", ""));
14+
}
15+
}

0 commit comments

Comments
 (0)