文書の過去の版を表示しています。
ofxMaxim
ofxMaximに関してあまりにWEB上に情報が少なかったので,自分のためにここにまとめておきます. 余談ですが,MaximillianのExampleが非常に良かったので,これ書いたの誰かなと思って作者のページをいろいろ見てたら
- Maximilian: C++ Audio and Music DSP Library, Mick Grierson, JUCE Summit 2015
にて作者が詳しく発表している動画がありましたので,ここに共有しておきます.教育におけるツールキットとして考えているので Exampleが非常に基礎を抑えたいい内容になってるんですね.libpdに関しては,とてもusefulだけど幾らかのケースにおいて,over-engineered(過剰スペック)であるとも述べています.ofxPdもとても優れているので一長一短だと思います.
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だけしておけばこのページは進められます.
サイン波を鳴らすSimple Example
440Hzのサイン波を鳴らすだけのサンプルコードを記載します.ただし openframeworksの場合は音を再生するためにaudioOut関数と一緒に組み合わせて使うことになります. audioOutに関しては openframeworksのExamples/sound/audioOutputExample を参照してください.audioOut()関数はすでにopenframeworks上でサウンドバッファーのCallback関数として登録されているので,audioOutの名前でないといけません.setup()では基本的にopenframeworksのサウンドデバイスに関する設定のみです.少しこの設定のコードが長いですが,システム上のデフォルトスピーカを自動選択するようにしています.こうしておくと開発のときに楽ちんです.
#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; };