Skip to content

Instantly share code, notes, and snippets.

View niusounds's full-sized avatar
🤘

Yuya Matsuo niusounds

🤘
View GitHub Profile
@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 / 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 / async_data.dart
Last active September 19, 2019 04:08
Asynchronous data management widget.
import 'package:flutter/material.dart';
typedef AsyncDataBuilder<T> = Widget Function(BuildContext, T);
typedef AsyncErrorBuilder = Widget Function(BuildContext, dynamic);
/// 非同期データの取得を管理するWidget。
/// 初回ビルド時に非同期データを取得し、[builder]が返却するWidgetをビルドする。
/// その後、必要に応じて非同期データの再取得を行い、Widgetを再構築する。
///
/// [refreshOnDidPopNext]をtrueにすると、[Navigator.pop]でこのWidgetが含まれる画面に戻ってきた時に再取得する。
<activity
android:name=".MainActivity"
...>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:host="handle" android:scheme="myscheme" />
</intent-filter>
</activity>
@niusounds
niusounds / main.dart
Created June 18, 2019 01:34
CustomMultiChildLayoutの使い方
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
@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 / ffserver.js
Created April 19, 2019 04:05
ffmpeg live transcode test
const express = require('express')
const app = express()
const { spawn } = require('child_process');
const URL = 'https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8'
app
.get('/video.webm', (req, res) => {
res.type('video/webm')
@niusounds
niusounds / gist:51c9c23f349f492c29957f98e0adbfd7
Created March 28, 2019 02:20
convert video to animation WebP with infinite loop and appropriate size for web (ex. width=640px).
ffmpeg -y -i .\video.mp4 -loop 0 -vf scale=640:-1 output.webp
@niusounds
niusounds / rsa_pem.dart
Last active December 25, 2018 04:25 — forked from proteye/rsa_pem.dart
How to encode/decode RSA private/public keys to PEM format in Dart with asn1lib and pointycastle
import 'dart:convert';
import 'dart:math';
import 'dart:typed_data';
import "package:pointycastle/export.dart";
import "package:asn1lib/asn1lib.dart";
List<int> decodePEM(String pem) {
var startsWith = [
"-----BEGIN PUBLIC KEY-----",
"-----BEGIN PRIVATE KEY-----",
@niusounds
niusounds / GetContext.cs
Last active December 14, 2018 06:04
Get Android Activity (Context) reference from Unity C#
var unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var activity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");