openframeworks:ofxmaxim

文書の過去の版を表示しています。


ofxMaxim

ofxMaximに関してあまりにWEB上に情報が少なかったので,自分のためにここにまとめておきます. 余談ですが,MaximillianのExampleが非常に良かったので,これ書いたの誰かなと思って作者のページをいろいろ見てたら

にて作者が詳しく発表している動画がありましたので,ここに共有しておきます.教育におけるツールキットとして考えているので Exampleが非常に基礎を抑えたいい内容になってるんですね.

ofxMaximはMaximillan をベースにしたopenframeworks用のaddonになります.Maximillan自体はC++のみで記載されてる波形生成ライブラリになります.

結構年代物の古いライブラリですが,C++で少ないファイル数で記述されているので環境構築も手軽です.ofxMaximのGitHubページを見てもらえればわかりますが,Exampleが同梱されていませんので,https://github.com/micknoise/Maximilian から一旦すべてのファイルをダウンロードすると良いです.addonの追加方法に関してはこちらでは触れません.このページではコードを載せているので,実際には ofxMaxim をgit cloneだけしておけばこのページは進められます.

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;

};

  • /home/users/2/lolipop.jp-4404d470cd64c603/web/ws/data/attic/openframeworks/ofxmaxim.1556955984.txt.gz
  • 最終更新: 2019/05/04 16:46
  • by baba