openframeworks:ofxmaxim

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
次のリビジョン両方とも次のリビジョン
of:ofxmaxim [2019/05/04 12:47] – [ofxMaximとは] babaof:ofxmaxim [2019/05/05 07:05] – [PANを振る] baba
行 6: 行 6:
  
 にて作者が詳しく発表している動画がありましたので,ここに共有しておきます.教育におけるツールキットとして考えているので にて作者が詳しく発表している動画がありましたので,ここに共有しておきます.教育におけるツールキットとして考えているので
-Exampleが非常に基礎を抑えたいい内容になってるんですね.+Exampleが非常に基礎を抑えたいい内容になってるんですね.libpdに関しては,とてもusefulだけど幾らかのケースにおいて,over-engineered(過剰スペック)であるとも述べています.ofxPdもとても優れているので一長一短だと思います
 ===== ofxMaximとは ===== ===== ofxMaximとは =====
 ofxMaximはMaximillan をベースにしたopenframeworks用のaddonになります.Maximillan自体はC++のみで記載されてる波形生成ライブラリになります. ofxMaximはMaximillan をベースにしたopenframeworks用のaddonになります.Maximillan自体はC++のみで記載されてる波形生成ライブラリになります.
行 14: 行 14:
 結構年代物の古いライブラリですが,C++で少ないファイル数で記述されているので環境構築も手軽です.ofxMaximのGitHubページを見てもらえればわかりますが,Exampleが同梱されていませんので,https://github.com/micknoise/Maximilian から一旦すべてのファイルをダウンロードすると良いです.addonの追加方法に関してはこちらでは触れません.このページではコードを載せているので,実際には ofxMaxim をgit cloneだけしておけばこのページは進められます. 結構年代物の古いライブラリですが,C++で少ないファイル数で記述されているので環境構築も手軽です.ofxMaximのGitHubページを見てもらえればわかりますが,Exampleが同梱されていませんので,https://github.com/micknoise/Maximilian から一旦すべてのファイルをダウンロードすると良いです.addonの追加方法に関してはこちらでは触れません.このページではコードを載せているので,実際には ofxMaxim をgit cloneだけしておけばこのページは進められます.
  
-===== 最もシプルなExample ===== +===== サイ波を鳴らすSimple Example ===== 
-440Hzのサイン波を鳴らすだけのサンプルコードを記載します.ただし openframeworksの場合は音を再生するためにaudioOut関数と一緒に組み合わせて使うことになります. audioOutに関しては openframeworksのExamples/sound/audioOutputExample を参照してください.+<WRAP group> 
 +<WRAP half column> 
 +440Hzのサイン波を鳴らすだけのサンプルコードを記載します.ただし openframeworksの場合は音を再生するためにaudioOut関数と一緒に組み合わせて使うことになります. audioOutに関しては openframeworksのExamples/sound/audioOutputExample を参照してください.audioOut()関数はすでにopenframeworks上でサウンドバッファーのCallback関数として登録されているので,audioOutの名前でないといけません. 
 + 
 +setup()では基本的にopenframeworksのサウンドデバイスに関する設定がほとんどです.少しこの設定のコードが長いですが,システム上のデフォルトスピーカを自動選択するようにしています.こうしておくと開発のときに楽ちんです.デフォルトスピーカに関してはmacの右上タスクバーにあるスピーカアイコンをクリックすると一覧表示されるサウンドデバイスで,チェックが入っている箇所です.ちなみにaltキーを押しながらクリックすると出力/入力が一緒に表示されます.右図を参照してください.またデフォルトスピーカに対して設定可能な最も高いサンプリングレートと,設定可能な出力/入力チャンネルを設定しています.setup()最後の行では,設定されたサウンドデバイスと同じ設定にMaximillian側を合わせています. 
 +</WRAP> 
 + 
 +<WRAP half column> 
 +{{:of:スクリーンショット_2019-05-04_16.57.36.png|}} 
 +</WRAP> 
 +</WRAP> 
 + 
 + 
 + 
 +<WRAP group> 
 +<WRAP half column> 
 +<code cpp ofApp.cpp> 
 +#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]; 
 +    } 
 +     
 + 
 +
 + 
 +</code> 
 +</WRAP> 
 + 
 +<WRAP half column> 
 +<code cpp ofApp.h> 
 +#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; 
 + 
 +}; 
 +</code> 
 +</WRAP> 
 +</WRAP> 
 + 
 +===== PANを振る ===== 
 +上記サンプルを利用して,サイン波が右から左へ移動するプログラムに記述し直してみます.PANの設定は 
 +  mymix.stereo(wave, outputs, 0.5); 
 +の0.5の部分です.このパラメータを操作することで 
 +  * 0: 左のみ 
 +  * 0.5: 両方 
 +  * 1.0: 右のみ 
 + 
 +という具合に音の左右の鳴りを変更することができます.そこで,次のようにmymix.stereoを変更します. 
 +  mymix.stereo(wave, outputs, ofMap(osc_pan.sinewave(1), -1.0, 1.0, 0.0, 1.0)); 
 + ただし,osc_pan はまだ宣言されていない変数なので,ofApp.h にこの変数を下記のように追記しておきましょう. 
 + ofxMaxiOsc osc, osc_pan;
  
  • /home/users/2/lolipop.jp-4404d470cd64c603/web/ws/data/pages/openframeworks/ofxmaxim.txt
  • 最終更新: 2019/06/06 08:53
  • by baba