文書の過去の版を表示しています。
ofxMaxim
ofxMaximに関してあまりにWEB上に情報が少なかったので,自分のためにここにまとめておきます. 余談ですが,MaximillianのExampleが非常に良かったので,これ書いたの誰かなと思って作者のページをいろいろ見てたら
- Maximilian: C++ Audio and Music DSP Library, Mick Grierson, JUCE Summit 2015
にて作者が詳しく発表している動画がありましたので,ここに共有しておきます.教育におけるツールキットとして考えているので Exampleが非常に基礎を抑えたいい内容になってるんですね.
ofxMaximとは
ofxMaximはMaximillan をベースにしたopenframeworks用のaddonになります.Maximillan自体はC++のみで記載されてる波形生成ライブラリになります.
- 公式ウェブサイト: http://www.maximilian.strangeloop.co.uk/
- GitHub[Maximillian] : https://github.com/micknoise/Maximilian
- GitHub[ofxMaxim] : https://github.com/falcon4ever/ofxMaxim
結構年代物の古いライブラリですが,C++で少ないファイル数で記述されているので環境構築も手軽です.ofxMaximのGitHubページを見てもらえればわかりますが,Exampleが同梱されていませんので,https://github.com/micknoise/Maximilian から一旦すべてのファイルをダウンロードすると良いです.addonの追加方法に関してはこちらでは触れません.このページではコードを載せているので,実際には ofxMaxim をgit cloneだけしておけばこのページは進められます.
最もシンプルなExample
440Hzのサイン波を鳴らすだけのサンプルコードを記載します.ただし openframeworksの場合は音を再生するためにaudioOut関数と一緒に組み合わせて使うことになります. audioOutに関しては openframeworksのExamples/sound/audioOutputExample を参照してください.audioOut()関数はすでにopenframeworks上でサウンドバッファーのCallback関数として登録されているので,audioOutの名前でないといけません.
#include "ofApp.h" //-------------------------------------------------------------- void ofApp::setup(){ ofSetFrameRate(60); settings.setOutListener(this); settings.sampleRate = 44100; settings.numOutputChannels = 2; settings.numInputChannels = 1; settings.bufferSize = 512; // set System Default Output Device auto devices = soundStream.getDeviceList(); for( int i = 0; i < devices.size(); i++ ){ if( devices[i].isDefaultOutput ){ cout << devices[i].name << endl; settings.setOutDevice(devices[i]); } } soundStream.setup(settings); } //-------------------------------------------------------------- void ofApp::update(){ } //-------------------------------------------------------------- void ofApp::draw(){ ofBackground(50); ofDrawBitmapString("Can you hear a 440Hz Sinewave?", 20,20); } void ofApp::audioOut(ofSoundBuffer &buffer) { int buffer_size = settings.bufferSize; int number_channels = settings.numOutputChannels; for( int i = 0; i < buffer_size; i++ ){ wave = osc.sinewave(440); mymix.stereo(wave, outputs, 0.5); buffer[i*number_channels ] = outputs[0]; buffer[i*number_channels + 1] = outputs[1]; } }
#pragma once
#include “ofMain.h” #include “ofxMaxim.h”
class ofApp : public ofBaseApp{
public:
void setup(); void update(); void draw(); void audioOut(ofSoundBuffer & buffer); ofxMaxiMix mymix; ofxMaxiOsc osc;
double wave; double outputs[2]; ofSoundStream soundStream; ofSoundStreamSettings settings;
};