2016-09-08 6 views
0

仮想オーディオデバイスのゲインを上げたい。音量は一番上がっていますが、オーディオはほとんど聞こえません。これを行うには、IOAudioDeviceのゲインIOAudioLevelControl::createVolumeControlを見てください。これはSoundflowerコードオーディオデバイスの出力ゲインを増やす

// Gain control for each channel 
    control = IOAudioLevelControl::createVolumeControl(SoundflowerDevice::kGainMax,   // Initial value 
                 0,         // min value 
                 SoundflowerDevice::kGainMax,   // max value 
                 0,         // min 0.0 in IOFixed 
                 (40 << 16) + (32768),    // 72 in IOFixed (16.16) 
                 channel,        // kIOAudioControlChannelIDDefaultLeft, 
                 channelNameMap[channel],    // kIOAudioControlChannelNameLeft, 
                 channel,        // control ID - driver-defined 
                 kIOAudioControlUsageInput); 
    addControl(control, (IOAudioControl::IntValueChangeHandler)gainChangeHandler); 

である私はこれがどのように機能するか、それを変更するかどうかはわかりませんように、私はいくつかの黒魔術のビットがシフトしない第五引数を変更する必要がありますように私には思えるけど。ありがとう

答えて

0

4番目と5番目のパラメータはminDBとmaxDBで、16.16固定小数点形式の整数で指定します。ここのdBはデジタルフルスケールに対してdBであると考えられます。つまり、0dBFSは最大値で、最小値は負の値です。少なくとも、あなたのパラメータは逆転しているように見え、正の値の符号は間違っています。

ブラックマジックは、16.16の固定小数点形式の値を指定しています。 https://en.wikipedia.org/wiki/Q_(number_format)を参照してください。

maxDBを40.5に設定しています。 40は整数部分に40ビットシフトし、32768は0.5を返します。

浮動小数点値に2^nを掛けます。ここでnは次のようになります。分数ビットの数(xx.16)を計算し、結果を丸めます。

int fixedPtVal = round(40.5 * (1<<16)); 

「minDBとmaxDB」で選択する項目に戻ってください。私は実際にこれについてのドキュメントを見つけることができませんでしたが、あなたは何かをしたいと思うと思います:

minDB = round(-40.5 * (1<<16)); 
maxDB = 0; 
+0

まだ何も起こっていない..私は何が起こっているのか分かりません。私はイコライザアプリを持っています(その仮想ドライバはSoundflowerにも基づいています)、音量に問題はありません。 IORegistryを調べると、私は、IOAudioLevelControls'maxDBとminDBの値がそれぞれ、ゲイン制御のために0x488000((72 << 16)+(32768))と0を見つけることができました。 Volume maxDB:0およびminDB:0xffb88000の場合私はゲイン値をコピーして、ドライバで使用しましたが、それでも同じです... – BsD

+0

btw私はSoundflowerBedをこのサウンドテストに使用しています – BsD

関連する問題