Skip to content

Instantly share code, notes, and snippets.

View AkiyukiOkayasu's full-sized avatar

Akiyuki Okayasu AkiyukiOkayasu

View GitHub Profile
@AkiyukiOkayasu
AkiyukiOkayasu / FrequencyToMIDInote.cpp
Last active October 12, 2017 08:33
周波数(Hz)からMIDIノートナンバーに変換するための方法(C++)
// 周波数(Hz)からMIDIノートナンバーへの変換
// Wikipediaの[MIDI tuning standard](https://en.wikipedia.org/wiki/MIDI_tuning_standard)を参照
// A=440Hzの場合
int freqToMidi(float freq)
{
int midinote = std::nearbyint(69.0 + 12.0 * log2(freq / 440.0));
return midinote;
}
@AkiyukiOkayasu
AkiyukiOkayasu / BasicBitOperation.md
Last active November 24, 2022 13:39
ビット演算の基礎

ビット演算の基礎

  • 8bitのデータを上位4bitと下位4bitに分割する

元となる8bitのデータをxとし、上位4bitをa、下位4bitをbとします

//擬似コード
a = (x >> 4) & 0b1111;
b = x & 0b1111;
  • 分割
    input: x (16bit)
@AkiyukiOkayasu
AkiyukiOkayasu / juce_MacMainMenu.cpp
Last active January 25, 2018 04:02
JUCEでMac OSのメニューを作成する
#include "../JuceLibraryCode/JuceHeader.h"
class MainContentComponent :
public Component,
public MenuBarModel//MenuBarModelを継承
{
public:
//==============================================================================
MainContentComponent()
{
@AkiyukiOkayasu
AkiyukiOkayasu / OscReceiveThread.py
Last active October 20, 2017 03:01
PythonのOSC受信スレッド
import time
import threading
import argparse
from pythonosc import dispatcher
from pythonosc import osc_server
def oscprint(unused_addr, args, *values):
print("value size: ", len(values))
for el in values:
print(el)
import math
import sys
def computeTickWidth(range, mostDivision):
minInterval = range / mostDivision
magnitude = pow(10, math.floor(math.log10(minInterval)))
residual = minInterval / magnitude
if residual > 5:
@AkiyukiOkayasu
AkiyukiOkayasu / myGitCommitLogRule.md
Last active June 21, 2018 05:54
Gitコミットログの書き方

Gitコミットログの書き方

[種別] 変更点の概要
詳細な説明

  • 種別
    • Add: 機能追加
    • Update: 機能変更(バグ修正ではない)
    • Fix: バグ修正
  • Remove: 削除
@AkiyukiOkayasu
AkiyukiOkayasu / getTimeStamp.cpp
Last active December 13, 2017 00:35
C++11でタイムスタンプ、時刻を取得する方法
#include <string>
#include <chrono>
#include <sstream>
#include <iomanip>
std::string getTimeStamp()
{
auto now = std::chrono::system_clock::now();
auto now_c = std::chrono::system_clock::to_time_t(now);
std::stringstream ss;
@AkiyukiOkayasu
AkiyukiOkayasu / TSP.py
Last active November 10, 2017 16:01
TSP(Time-Stretched-Pulse)信号を生成し、waveファイルの書き出しをする
import cmath
import numpy as np
from scipy.fftpack import fft, ifft
import soundfile as sf
import matplotlib.pyplot as plt
FS = 48000
N = 2 ** 16
J = N // 4
a = 2.0 * np.pi * J
@AkiyukiOkayasu
AkiyukiOkayasu / LowpassFilterForTest.md
Last active June 21, 2018 05:52
RCローパスフィルタ。センサーの入力などにローパスをとりあえずかけてみたい時用。

簡易ローパスフィルター

RCローパスフィルター。センサーの入力などにとりあえずローパスをかけたいときなどに。

C++

double lastValue = 0.0;
const double alpha = 0.8;//大きいほどカットオフ周波数が低くなる(0.7~0.95くらいの範囲で使用する)

double lowpass(double input)
{
@AkiyukiOkayasu
AkiyukiOkayasu / juce_exportWav.cpp
Last active December 8, 2017 05:16
JUCEでWavファイルを書き出す
void MainContentComponent::exportWav(AudioSampleBuffer &bufferToWrite, String fileName)
{
const double sampleRate = deviceManager.getCurrentAudioDevice()->getCurrentSampleRate();//現在のサンプルレートを取得
const int numChannel = bufferToWrite.getNumChannels();
const int bitDepth = 32;//32bitFloat
File file(File::getSpecialLocation(File::SpecialLocationType::userDesktopDirectory).getChildFile(fileName));
file.deleteFile();
ScopedPointer<FileOutputStream> fos(file.createOutputStream());
WavAudioFormat wavFormat;
ScopedPointer<AudioFormatWriter> writer(wavFormat.createWriterFor(fos, sampleRate, numChannel, bitDepth, StringPairArray(), 0));