差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
of:ofxmaxim [2019/05/05 09:05] – [MaximillianのExampleで学習する] baba | openframeworks:ofxmaxim [2019/06/06 08:53] (現在) – ↷ of:ofxmaxim から openframeworks:ofxmaxim へページを移動しました。 baba | ||
---|---|---|---|
行 137: | 行 137: | ||
| | ||
これにより,osc_pan を1Hzに設定し,その値を0.0, | これにより,osc_pan を1Hzに設定し,その値を0.0, | ||
+ | |||
+ | ===== InputとOutputを同時に使う ===== | ||
+ | 先程のシンプルなプログラムはサイン波を再生しているだけでした.次に簡単な雛形Exampleとして,サウンドデバイスの入力と出力を同時に扱うプログラムを記述してみます.ふるまいとしては下記のようにします. | ||
+ | - 出力:440Hzのサイン波 | ||
+ | - 入力:マイク入力のデータを画面に表示する | ||
+ | |||
+ | ofxMaximの話というよりは,OF側の記述追加のみになります.最初のサウンドデバイス設定の際,入力デバイスに関しても同時に設定しておきます. | ||
+ | 出力及び入力デバイスを別々に指定できますが,Sampling Rateは両方共同じ設定にしておく必要があります.少しだけ記述量が増えていますが,どれも基礎で重要なので下記コードはよく読んで十分理解してきましょう.なお,プログラムを実行した後,スペースキーを押すとサイン波の出力が停止するので,環境音を見てみたい場合にご利用ください. | ||
+ | |||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | <code cpp ofApp.cpp> | ||
+ | #include " | ||
+ | |||
+ | void ofApp:: | ||
+ | ofSetFrameRate(60); | ||
+ | | ||
+ | // set System Output/ | ||
+ | int number_output_channels; | ||
+ | int number_input_channels; | ||
+ | auto devices = soundStream.getDeviceList(); | ||
+ | for( int i = 0; i < devices.size(); | ||
+ | if( devices[i].isDefaultOutput ){ | ||
+ | string_device_info += " | ||
+ | settings.setOutDevice(devices[i]); | ||
+ | string_device_info += " - Configurable Sampling Rate: "; | ||
+ | for( int j = 0; j < devices[i].sampleRates.size(); | ||
+ | string_device_info += ofToString(devices[i].sampleRates[j])+","; | ||
+ | } | ||
+ | string_device_info += " | ||
+ | | ||
+ | settings.sampleRate = devices[i].sampleRates[0];// | ||
+ | number_output_channels = 2; // stereo | ||
+ | } | ||
+ | if( devices[i].isDefaultInput ){ | ||
+ | string_device_info += "Input Device: " | ||
+ | settings.setInDevice(devices[i]); | ||
+ | string_device_info += " - Configurable Sampling Rate: "; | ||
+ | for( int j = 0; j < devices[i].sampleRates.size(); | ||
+ | string_device_info += ofToString(devices[i].sampleRates[j])+","; | ||
+ | } | ||
+ | string_device_info += " | ||
+ | number_input_channels = 1; // mono | ||
+ | } | ||
+ | } | ||
+ | string_device_info += " | ||
+ | settings.setOutListener(this); | ||
+ | settings.setInListener(this); | ||
+ | settings.numOutputChannels = number_output_channels; | ||
+ | settings.numInputChannels = number_input_channels; | ||
+ | settings.bufferSize = 512; | ||
+ | soundStream.setup(settings); | ||
+ | | ||
+ | // set Maximillian same as sound device setting. | ||
+ | maxiSettings:: | ||
+ | maxiSettings:: | ||
+ | | ||
+ | |||
+ | flg_pause = false; | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | void ofApp:: | ||
+ | } | ||
+ | |||
+ | void ofApp:: | ||
+ | ofBackground(50); | ||
+ | ofDrawBitmapString(" | ||
+ | ofNoFill(); | ||
+ | ofBeginShape(); | ||
+ | { | ||
+ | for( int i = 0 ; i < settings.bufferSize; | ||
+ | ofVertex(ofGetWidth()*(i/ | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | ofEndShape(); | ||
+ | | ||
+ | ofDrawBitmapString(string_device_info, | ||
+ | } | ||
+ | |||
+ | void ofApp:: | ||
+ | { | ||
+ | if( flg_pause )return; | ||
+ | | ||
+ | int number_channels = settings.numOutputChannels; | ||
+ | | ||
+ | for( int i = 0; i < settings.bufferSize; | ||
+ | wave = osc.sinewave(440); | ||
+ | mymix.stereo(wave, | ||
+ | buffer[i*number_channels | ||
+ | buffer[i*number_channels + 1] = outputs[1]; | ||
+ | } | ||
+ | | ||
+ | |||
+ | } | ||
+ | |||
+ | void ofApp:: | ||
+ | { | ||
+ | for( int i = 0; i < settings.bufferSize; | ||
+ | buf_input[i] = buffer[i]; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void ofApp:: | ||
+ | { | ||
+ | if( key == ' ' ){ | ||
+ | flg_pause = !flg_pause; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <WRAP half column> | ||
+ | <code cpp ofApp.h> | ||
+ | #pragma once | ||
+ | |||
+ | #include " | ||
+ | #include " | ||
+ | |||
+ | class ofApp : public ofBaseApp{ | ||
+ | |||
+ | public: | ||
+ | void setup(); | ||
+ | void update(); | ||
+ | void draw(); | ||
+ | void keyPressed(int key); | ||
+ | | ||
+ | void audioIn(ofSoundBuffer & | ||
+ | void audioOut(ofSoundBuffer & buffer); | ||
+ | | ||
+ | ofxMaxiMix mymix; | ||
+ | ofxMaxiOsc osc; | ||
+ | | ||
+ | double wave; | ||
+ | double outputs[2]; | ||
+ | double buf_input[512]; | ||
+ | ofSoundStream soundStream; | ||
+ | ofSoundStreamSettings settings; | ||
+ | |||
+ | string string_device_info; | ||
+ | bool flg_pause; | ||
+ | }; | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ==== 実行時のスクリーンショット ==== | ||
+ | {{ : | ||
===== MaximillianのExampleで学習する ===== | ===== MaximillianのExampleで学習する ===== |