0

ポテンショメータに追加で接続されている ATmega マイクロコントローラに接続された MP3 ボードがあります。MP3 ボードはオンボード スピーカーを介して MP3 データを直接再生するため、出力の音量を設定することもできます。

ご想像のとおり、poti から値を読み取り、マイクロコントローラーに転送します。残念ながら、マイクロコントローラーは音量を直線的に増加させません。したがって、値 0 から 128 まではほとんど何も聞こえず、128 から 255 (最大) までは音量が急速に増加します。

次の関数でこの問題を解決できることがわかりました。

vol = 1 - (1 - x)^4

ただし、x は 0 から 1 の間でなければならず、結果も 0 から 1 の間です。

私はマイクロコントローラを使用しているので、

  1. この数式を変換して、符号なし整数で使用できるようにします
  2. 1秒間に複数回poti値を読み取るため、最適化します(おそらくいくつかの安価なバイナリ関数を使用します)。したがって、この関数は毎秒複数回計算する必要があり、マイクロコントローラーを他のものにも使用したい ;-)

たぶん、あなたの何人かはアイデアを持っていますか?素晴らしいことだ!

 uint8_t linearize_volume(uint8_t value) {
     // ideas?
     // please don't use bigger data types than uint16_t
 }
4

3 に答える 3

0

まず、オーディオテーパーポットではなく、リニアポットを使用していることを確認してください。

これはオーディオ出力の典型です。データは正弦波であるため、負の値が必要です。パワーレベルにアクセスするためだけにネガをポジティブに変換することは確かにできますが、完全に異なるサウンドを聞くことなくサンプルを変更することはできません。

出力デバイスによっては、低い値ではスピーカーに十分な電力を供給できない場合があります。

「MP3 ボード」には、サンプルを変更せずに音量を制御する機能が含まれている必要があります。

あなたはポットを読み、それをマイクロに転送すると述べます。マイクロのADCでポットを読んでいませんか?

于 2013-06-23T19:12:19.973 に答える