Skip to content

Instantly share code, notes, and snippets.

View sigmadeltasoftware's full-sized avatar
🎯
Focus.

Bojan Belic sigmadeltasoftware

🎯
Focus.
View GitHub Profile
@sigmadeltasoftware
sigmadeltasoftware / build.gradle
Created November 29, 2016 10:20
Gradle version control
defaultConfig {
def gitCommitHash = "git rev-parse --short HEAD".execute().text.trim()
if ("git status -s".execute().text.trim() != "") {
gitCommitHash += "-dirty"
}
applicationId "com.sigmadelta.kiln"
minSdkVersion.apiLevel 21
targetSdkVersion.apiLevel 23
versionCode 1
versionName "1.0.0 - " + gitCommitHash
@sigmadeltasoftware
sigmadeltasoftware / activity_main.xml
Last active February 2, 2017 22:00
SeekBarRotator example implementation
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
@sigmadeltasoftware
sigmadeltasoftware / DoubleTapSeekBar.java
Created February 2, 2017 22:18
DoubleTapSeekBar initial implementation
package com.sigmadelta.verticaldoubletapseekbar;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.SeekBar;
public class DoubleTapSeekBar extends SeekBar {
public DoubleTapSeekBar(Context context) {
@sigmadeltasoftware
sigmadeltasoftware / DoubleTapSeekBar.java
Created February 2, 2017 22:32
DoubleTapSeekBar with SimpleOnGestureListener
package com.sigmadelta.verticaldoubletapseekbar;
import android.content.Context;
import android.support.v4.view.GestureDetectorCompat;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.SeekBar;
@sigmadeltasoftware
sigmadeltasoftware / DoubleTapSeekBarEvent.java
Last active February 2, 2017 22:44
DoubleTapSeekBarEvent
package com.sigmadelta.verticaldoubletapseekbar;
public interface DoubleTapSeekBarEvent {
void onDoubleTap(DoubleTapSeekBar seekBar);
}
@sigmadeltasoftware
sigmadeltasoftware / DoubleTapSeekBar.java
Created February 2, 2017 23:09
Final implementation for DoubleTapSeekBar
package com.sigmadelta.verticaldoubletapseekbar;
import android.content.Context;
import android.support.v4.view.GestureDetectorCompat;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.SeekBar;
import java.util.Timer;
@sigmadeltasoftware
sigmadeltasoftware / MainActivity.java
Created February 2, 2017 23:11
Activity for DoubleTapSeekBar
package com.sigmadelta.verticaldoubletapseekbar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
@sigmadeltasoftware
sigmadeltasoftware / AudioPlayer.java
Created March 21, 2017 13:32
Android Low-Latency Audio Post-Processing with Superpowered - AudioPlayer Gist
...
...
private class EffectAudioTrack extends AudioTrack {
public EffectAudioTrack(int streamType, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes, int mode) throws IllegalArgumentException {
super(streamType, sampleRateInHz, channelConfig, audioFormat, bufferSizeInBytes, mode);
}
public EffectAudioTrack(int streamType, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes, int mode, int sessionId) throws IllegalArgumentException {
@sigmadeltasoftware
sigmadeltasoftware / SuperpoweredRenderer.cpp
Last active March 23, 2017 13:07
Android Low-Latency Audio Post-Processing with Superpowered - SuperpoweredRenderer constructor
SuperpoweredRenderer::SuperpoweredRenderer(unsigned int samplerate, unsigned int buffersize, const char *path, int fileLength) {
/*
* According to the SuperpoweredAdvancedAudioPlayer::process method, the size of our buffer should be: numberOfSamples * 8 + 64 bytes big
*/
stereoBuffer = (float *)memalign(16, (buffersize * 8) + 64);
audioPlayer = new SuperpoweredAdvancedAudioPlayer(&audioPlayer , playerEventCallbackA, samplerate, 0);
audioPlayer->open(path, 0, fileLength);
audioSystem = new SuperpoweredAndroidAudioIO(samplerate, buffersize, false, true, audioProcessing, this, -1, SL_ANDROID_STREAM_MEDIA, 0);
@sigmadeltasoftware
sigmadeltasoftware / SuperpoweredRenderer.cpp
Last active March 23, 2017 13:30
Android Low-Latency Audio Post-Processing with Superpowered - SuperpoweredRenderer::process() method
bool SuperpoweredRenderer::process(short int *output, unsigned int numberOfSamples) {
bool silence = !audioPlayer->process(stereoBuffer, false, numberOfSamples);
if (!silence) {
/*****************************
* APPLY PROCESSING BELOW
*/
const int nrChannels = 2;
for (int i = 0; i < numberOfSamples * nrChannels; ++i) {
stereoBuffer[i] = vibrato.processOneSample(stereoBuffer[i]);