Created
July 19, 2016 03:19
-
-
Save GRGSIBERIA/95d515ff9132057e370ce3ce543d567d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "TinyASIO.hpp" | |
using namespace asio; | |
// ControllerBaseを継承することで,オリジナルのコントローラを作れます | |
class OriginalController : public ControllerBase | |
{ | |
// コールバック関数から呼び出せるようにstaticで宣言する | |
static InputBuffer* input; | |
static OutputBuffer* output; | |
// バッファリング用のコールバック関数 | |
// バッファが満杯になるとASIOから呼び出される | |
static void BufferSwitch(long index, long) | |
{ | |
void* outBuf = output->GetBuffer(index); // ASIO側の出力バッファのアドレス | |
void* inBuf = input->GetBuffer(index); // ASIO側の入力バッファのアドレス | |
// 入力から出力に流す,BufferSize()でバッファの容量を返す | |
memcpy(outBuf, inBuf, BufferSize()); // 入力バッファ0 => 出力バッファ0 | |
// 入力ストリームに蓄積する,BufferLength()でバッファの個数を返す | |
input->Store(inBuf, BufferLength()); // 入力バッファ0 => 入力ストリーム0 | |
// note: 重い処理をかけると音が途切れるので注意 | |
// note: フーリエなどの処理は一度ストリームに蓄積して,コールバック関数外で処理するのがベタです | |
} | |
public: | |
OriginalController(const std::string& driverName) : ControllerBase(driverName) | |
{ | |
// CreateBufferでバッファの初期化とコールバック関数の登録をする | |
// 1番の入力チャンネルと0番の出力チャンネルからバッファを生成する | |
CreateBuffer({channelManager->Inputs(1), channelManager->Outputs(0)}, &BufferSwitch); | |
input = &bufferManager->Inputs(0); // 入力チャンネル1 => 入力バッファ0 | |
output = &bufferManager->Outputs(0); // 出力チャンネル0 => 出力バッファ0 | |
} | |
StreamPtr Fetch() | |
{ | |
// 入力ストリームの内容を取り出す | |
return input->Fetch(); | |
} | |
}; | |
InputBuffer* OriginalController::input = nullptr; | |
OutputBuffer* OriginalController::output = nullptr; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment