Skip to content

Instantly share code, notes, and snippets.

View niusounds's full-sized avatar
🤘

Yuya Matsuo niusounds

🤘
View GitHub Profile
@niusounds
niusounds / AudioInputStream.kt
Last active March 31, 2024 17:22
AudioInputStream and AudioOutputStream for Android. These wrap AudioRecord and AudioTrack.
import android.media.AudioFormat
import android.media.AudioRecord
import android.media.MediaRecorder
import java.io.IOException
import java.io.InputStream
class AudioInputStream(
audioSource: Int = MediaRecorder.AudioSource.DEFAULT,
sampleRate: Int = 44100,
channelConfig: Int = AudioFormat.CHANNEL_IN_MONO,
@niusounds
niusounds / Carousel.kt
Created November 30, 2022 16:46
Carousel (auto scrolling & manual scrolling & infinite scrolling horizontal pager) with accompanist pager https://google.github.io/accompanist/pager/
@niusounds
niusounds / RingBuffer.kt
Last active April 20, 2022 22:53
RingBuffer in Kotlin
class RingBuffer(val capacity: Int) {
private val storage = ByteArray(capacity)
/**
* Convenient version of [read].
* This method allocates new array every time. Do not use this in heavy loop.
*
* @param startPosition Start position. Can be over than capacity.
* @param size Result data size.
@niusounds
niusounds / MatrixEvaluator.java
Created May 12, 2014 03:48
Matrix to Matrix implementation
import android.animation.TypeEvaluator;
import android.graphics.Matrix;
public class MatrixEvaluator implements TypeEvaluator<Matrix> {
private Matrix evaluated = new Matrix();
private float[] values = new float[9];
private float[] startValues = new float[9];
private float[] endValues = new float[9];
@Override
@niusounds
niusounds / bs-modal-center.js
Created August 27, 2014 02:59
Bootstrapのmodalを画面中央に表示するためのAngularJS Directive。要jQuery
angular.module('ModalCenter', []).directive('modalDialog', function($window) {
return {
restrict: 'C',
link: function(scope, element, attrs) {
var win = $($window);
win.on('resize', modalCenter);
function modalCenter() {
element.css('margin-top', (win.height() - element.height()) * 0.5 + 'px');
}
modalCenter();
@niusounds
niusounds / FloatSeekBar.java
Created March 12, 2014 11:50
Custom SeekBar for Android that treat its value as float type. floatMax and floatMin can be negative value.
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.widget.SeekBar;
public class FloatSeekBar extends SeekBar {
private float max = 1.0f;
private float min = 0.0f;
public FloatSeekBar(Context context, AttributeSet attrs, int defStyle) {
@niusounds
niusounds / gist:4bc7abf964afcc2ac3df7bda65282592
Created October 13, 2020 02:48
細切れのデータを一旦バッファに貯めてからオーディオデバイスへ送りたかった
class AudioTrack {
private val bufferSize: Int // some value depends on environment
private val writeBuffer = FloatArray(bufferSize / 4) // actual buffer to send to audio device
private var writeOffset = 0 // current offset to write next buffer
fun write(data: FloatArray, offset: Int, size: Int) {
val remainingWriteBufferSize = writeBuffer.size - writeOffset
if (remainingWriteBufferSize >= size) {
System.arraycopy(data, offset, writeBuffer, writeOffset, size)
writeOffset += size
@niusounds
niusounds / deep_merge_map.dart
Last active April 18, 2020 14:34
Map deep merge in Dart.
Map<String, dynamic> deepMergeMap(Map<String, dynamic> a, Map<String, dynamic> b) {
b.forEach((k, v) {
if (!a.containsKey(k)) {
a[k] = v;
} else {
// TODO handle List type
if (a[k] is Map) {
deepMergeMap(a[k], b[k]);
} else {
a[k] = b[k];
@niusounds
niusounds / OrientationLiveData.kt
Created June 29, 2018 03:08
Device orientation sensor data for LiveData.
import android.arch.lifecycle.LiveData
import android.content.Context
import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager
data class Orientation(
val azimuth: Float,
val pitch: Float,
@niusounds
niusounds / MainActivity.java
Created December 26, 2016 05:04
Using Rajawali (and AndroidAnnotations) to play 360 video.
import android.app.Activity;
import android.media.MediaPlayer;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Bean;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.ViewById;
import org.rajawali3d.view.SurfaceView;
import java.io.IOException;