openframeworks:ofxmaxim

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


ofxMaxim

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

にて作者が詳しく発表している動画がありましたので,ここに共有しておきます.教育におけるツールキットとして考えているので Exampleが非常に基礎を抑えたいい内容になってるんですね.libpdに関しては,とてもusefulだけど幾らかのケースにおいて,over-engineered(過剰スペック)であるとも述べています.ofxPdもとても優れているので一長一短だと思います.

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の名前でないといけません.setup()では基本的にopenframeworksのサウンドデバイスに関する設定のみです.少しこの設定のコードが長いですが,システム上のデフォルトスピーカを自動選択するようにしています.こうしておくと開発のときに楽ちんです.デフォルトスピーカに関してはmacの右上タスクバーにあるスピーカアイコンをクリックすると一覧表示されるサウンドデバイスで,チェックが入っている箇所です.ちなみにaltキーを押しながらクリックすると出力/入力が一緒に表示されます.右図を参照してください.

#include "ofApp.h"

void ofApp::setup(){
    ofSetFrameRate(60);
    
    // set System Default Output Device
    int sampling_rate;
    int number_output_channels;
    int number_input_channels;
    int buffer_size = 512;
    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]);
            sampling_rate = devices[i].sampleRates[devices[i].sampleRates.size()-1];
            number_output_channels = devices[i].outputChannels;
            number_input_channels = devices[i].inputChannels;
        }
    }
    
    settings.setOutListener(this);
    settings.sampleRate = sampling_rate;
    settings.numOutputChannels = number_output_channels;
    settings.numInputChannels = number_input_channels;
    settings.bufferSize = buffer_size;
    soundStream.setup(settings);
    
    // set Maximillian same as sound device setting.
    maxiSettings::sampleRate = sampling_rate;
    maxiSettings::bufferSize = buffer_size;
}



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.1557006323.txt.gz
  • 最終更新: 2019/05/05 06:45
  • by baba