問題タブ [fmod]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
4514 参照

c - FFT - PCM データにウィンドウを適用する

getSpectrum現在、FMODオーディオライブラリの機能を再現しようとしています。この関数は、現在再生中のバッファの PCM データを読み取り、このデータにウィンドウを適用し、FFT を適用してスペクトルを取得します。

各 float が 0 ~ 1 dB の float の配列を返します ( 10.0f * ( float)log10(val) * 2.0f)。

自分が何をすべきかよくわからないので、説明します。

最初に、4096 バイトのバッファーで PCM データを取得します。ドキュメントによると、PCM データは左右のデータのペアであるサンプルで構成されています。

データ

私の場合、上の画像のように 16 ビットのサンプルを使用しています。したがって、左チャンネルのみで作業したい場合は、左の PCM データを次のようにして短い配列に保存します。

したがって、サンプル = 4 バイトの場合、1024 個のサンプルがあります。つまり、左チャネルを表す 1024 ショートと右チャネルを表す 1024 ショートです。

FFT を実行するには、float 配列を用意し、データにウィンドウ (ハニング) を適用する必要があります。

wewinは入力、iは配列内の位置、および配列sのサイズ (1024) です。

左チャンネルのみを取得するには:

次に、kiss_fft のおかげで FFT を実行します (実数から複素数へ)。kiss_fft_cpx *ouputサイズ 1024/2+1 = 513 の (複合体の配列)を取得します。

各周波数の振幅を次のように計算します。

dB で計算します。

ampは 0 と 1 の間ではありません。どこでデータを正規化する必要があるかわかりません (PCM データ上または最後)。また、PCM データにウィンドウを適用する方法もわかりません。

これは、getSpectrum 関数の結果と比較して、0 ~ 20kHz の曲から取得した結果です。(長方形の窓の場合)

結果

どうすれば同じ結果を得ることができますか?

0 投票する
1 に答える
1096 参照

header - Fmod インクルード エラー

いくつかの mp3 ファイルを再生する C++ プログラムを作成していますが、問題が発生しています。識別子が見つからないというエラーが発生しています。ヘッダーを含める以外に、誰かアドバイスをもらえますか?

これが私のコードです:

};

ここに私のエラーがあります:

0 投票する
1 に答える
313 参照

c - 関数で FMOD_SOUND を使用するにはどうすればよいですか?

関数で FMOD を使用してサウンドを聴きたい..前に、他のすべてのサウンドを聞くことができると言いたいのですが、それらは関数で使用されていません。

ここにコードの抜粋があります:

header.h

そして今コード:

キー V を使用して関数 leson() を呼び出したい

ここにレッスンがあります()

V を押すと、ファイル stderr に回線テストが含まれているため、スイッチは問題ありませんが、なぜこの音が聞こえないのですか?

0 投票する
4 に答える
1309 参照

c - 2 つのサウンドを同時に再生することはできません

2つのサウンドを同時に再生できない理由を誰か説明してもらえますか?

ここにコードの一部:

そして、私は自分の音を次のように呼んでいます:

「爆弾」を再生したときに聞こえるので(この音は3秒程度です)、チャンネルの問題があると思いますが、「スクラッチ」音が発生すると「爆弾」という音は止まります...

0 投票する
1 に答える
747 参照

objective-c - iOS - FMOD を使用する複数のアプリ - オーディオは最初に実行するアプリでのみ機能します

私が開発していない既存のアプリに取り組んでおり、FMOD を使用してオーディオを再生します。

見た目から、以前のバージョンのアプリは、代わりに AVAudioPlayer を使用するように作成されており、いずれかを使用するビルド オプションがあります。

ただし、多くの機能は FMOD バージョンを使用してビルドされた場合にのみ含まれるため、最新バージョンでは FMOD を使用します。

問題は、最初に既存のアプリの 1 つを使用してから、開発中のこの新しいアプリを実行しようとしたときに発生します。

1 つのアプリを実行し、それをバックグラウンドのままにして 2 つ目のアプリを実行すると、2 つ目のアプリのサウンドがまったく再生されません。最初のアプリに戻って問題なくサウンドを再生できます。両方のアプリを終了し、もう一方のアプリを最初に起動すると、完全に機能します。

AVAudioPlayer オプションを使用してアプリをビルドすると、この問題は発生しませんが、FMOD バージョン用に作成されたすべての機能がありません。したがって、それが FMOD と関係があることを証明できますが、何が原因かはわかりません。

編集: もう少し掘り下げたところ、2 つの FMOD エラーが発生しました:

まず、実行する
result = fmodSystem->init(4, FMOD_INIT_NORMAL | FMOD_INIT_ENABLE_PROFILE, NULL);
と、エラー 51が表示されます。

次に、実行する
result = fmodSystem->createSound((const char *)[audioData bytes], FMOD_SOFTWARE | FMOD_OPENMEMORY, &exinfo, &fmodSound);
と、エラー 79 が表示されます - 「System::init または System::setDriver が呼び出されなかったため、このコマンドは失敗しました。」

2 つ目は、init が失敗したためと思われます。

0 投票する
1 に答える
2091 参照

c++ - FMOD はサウンドを再生しません C++

実際にFMODで音を鳴らしてみましたがうまくいきませんでした。

しかし、私がプレイするとき( "mysound.wav"); 私のコードでは何も追加せず、戻り値を確認し、問題はありません。何か考えはありますか?ありがとう

0 投票する
2 に答える
1459 参照

c++ - .mp3 .wav などのオーディオ ファイルの各フレームのオーディオ周波数

「fmod」や「cwave」ライブラリ、さらには他のライブラリを使用して、.mp3 や .wav などのオーディオ ファイルやその他のサウンド フォーマットの各フレームの周波数を取得する方法を見つけることはできますか? C/C++ でこの頻度を調べるにはどうすればよいですか?

0 投票する
1 に答える
2062 参照

c# - ユーザーが作成したストリームを使用した FMOD CreateSound

C# で SNES SPC ファイルと FMOD を再生するはずの DLL がある場合、この呼び出しがsystem.createSound失敗するのはなぜですか?

usercreatedsoundFMOD に付属のサンプルと比較してください。

長さ、頻度...関係ありません。

編集: 少なくとも初期化が行われる限り、SPC プレーヤーが機能すること、および FMOD に付属のサンプルが正常にビルドおよび実行されることを確認済みです。実行するために設定をいじることを除けば、唯一の特に意味のある変更は、4.0 スタイルで記述したことです。

0 投票する
2 に答える
1224 参照

audio - FMOD サラウンド サウンド オープンフレームワーク

わかりました、これを台無しにしないことを願っています。いくつかの答えを探しましたが、何も見つかりません。3D モードで FMOD サウンド プレーヤーを使用して、openframeworks で簡単なサンプラーを作成しようとしています。単一のインスタンスを正常に動作させることができます (libsndfilerecorder を使用して新しいファイルを録音し、それを再生してサラウンドで移動します。

ただし、ライブ ショーで一度に 1 つのレイヤーを録音して置き換えることができるループ オーディオの 8 つのレイヤーが必要です。複数のレイヤーがあるとすぐに、多くの問題が発生します。

私の質問の最初の部分は、FMOD 3D モードに関するもので、これはリスナー相対であるため、すべてのサウンドに対してリスナーの位置を定義する必要があります (ヘッド相対モードを使用することをお勧めしますが、これをまったく機能させることはできません。繰り返します。これは、単一のプレーヤーを使用している場合は正常に機能しますが、複数のプレーヤーでは、最後に更新したリスナーのみが実際に機能します。

私が抱えている主な問題は、複数のプレーヤーを使用すると歪みが発生し、新しい録音で現在再生中の他のサウンドが混在することが多いことです (マイクがそれらを聞くことができない場合でも)。libsndfilerecorder と FMOD との非互換性はありますか?

ここで、プレーヤーを初期化します

記録中にファイルをアンロードし、ロードされていないプレーヤーの位置が更新されていないことを確認します。

void fmodApp::recordingStart( int recordingId ){

}

そして、このように録音を停止します。

}

更新プロセスを中断しないように注意していますが、どこが間違っているのかわかりません。

どうもありがとう