わかりました、これを台無しにしないことを願っています。いくつかの答えを探しましたが、何も見つかりません。3D モードで FMOD サウンド プレーヤーを使用して、openframeworks で簡単なサンプラーを作成しようとしています。単一のインスタンスを正常に動作させることができます (libsndfilerecorder を使用して新しいファイルを録音し、それを再生してサラウンドで移動します。
ただし、ライブ ショーで一度に 1 つのレイヤーを録音して置き換えることができるループ オーディオの 8 つのレイヤーが必要です。複数のレイヤーがあるとすぐに、多くの問題が発生します。
私の質問の最初の部分は、FMOD 3D モードに関するもので、これはリスナー相対であるため、すべてのサウンドに対してリスナーの位置を定義する必要があります (ヘッド相対モードを使用することをお勧めしますが、これをまったく機能させることはできません。繰り返します。これは、単一のプレーヤーを使用している場合は正常に機能しますが、複数のプレーヤーでは、最後に更新したリスナーのみが実際に機能します。
私が抱えている主な問題は、複数のプレーヤーを使用すると歪みが発生し、新しい録音で現在再生中の他のサウンドが混在することが多いことです (マイクがそれらを聞くことができない場合でも)。libsndfilerecorder と FMOD との非互換性はありますか?
ここで、プレーヤーを初期化します
for (int i=0; i<CHANNEL_COUNT; i++) {
lvelocity[i].set(1, 1, 1);
lup[i].set(0, 1, 0);
lforward[i].set(0, 0, 1);
lposition[i].set(0, 0, 0);
sposition[i].set(3, 3, 2);
svelocity[i].set(1, 1, 1);
//player[1].initializeFmod();
//player[i].loadSound( "1.wav" );
player[i].setVolume(0.75);
player[i].setMultiPlay(true);
player[i].play();
setupHold[i]==false;
recording[i]=false;
channelHasFile[i]=false;
settingOsc[i]=false;
}
記録中にファイルをアンロードし、ロードされていないプレーヤーの位置が更新されていないことを確認します。
void fmodApp::recordingStart( int recordingId ){
if (recording[recordingId]==false) {
setupHold[recordingId]=true; //this stops the position updating
cout<<"Start recording Channel " + ofToString(recordingId+1)+" setup hold is true \n";
pt=getDateName() +".wav";
player[recordingId].stop();
player[recordingId].unloadSound();
audioRecorder.setup(pt);
audioRecorder.setFormat(SF_FORMAT_WAV | SF_FORMAT_PCM_16);
recording[recordingId]=true; //this starts the libSndFIleRecorder
}
else {
cout<<"Channel" + ofToString(recordingId+1)+" is already recording \n";
}
}
そして、このように録音を停止します。
void fmodApp::recordingEnd( int recordingId ){
if (recording[recordingId]=true) {
recording[recordingId]=false;
cout<<"Stop recording" + ofToString(recordingId+1)+" \n";
audioRecorder.finalize();
audioRecorder.close();
player[recordingId].loadSound(pt);
setupHold[recordingId]=false;
channelHasFile[recordingId]=true;
cout<< "File recorded channel " + ofToString(recordingId+1) + " file is called " + pt + "\n";
}
else {
cout << "Sorry track" + ofToString(recordingId+1) + "is not recording";
}
}
更新プロセスを中断しないように注意していますが、どこが間違っているのかわかりません。
どうもありがとう