瀏覽代碼

Added DAC & HP balance examples

Changed method for setting level/gains for left & right from
'item_left(..); item_right(..);' style to 'volume(left,right)' style
instead.
dds
robsoles 10 年之前
父節點
當前提交
56466edaae
共有 2 個檔案被更改,包括 163 行新增0 行删除
  1. +83
    -0
      examples/SGTL5000_Specific/balanceDAC/balanceDAC.ino
  2. +80
    -0
      examples/SGTL5000_Specific/balanceHP/balanceHP.ino

+ 83
- 0
examples/SGTL5000_Specific/balanceDAC/balanceDAC.ino 查看文件

@@ -0,0 +1,83 @@
// DAC balance example: Will influence both HP & LO outputs.

#include <Audio.h>
#include <Wire.h>
#include <SD.h>

#define PIN_VOLUME 0
#define PIN_BALANCE 15

const int myInput = AUDIO_INPUT_LINEIN;
// const int myInput = AUDIO_INPUT_MIC;

// Create the Audio components. These should be created in the
// order data flows, inputs/sources -> processing -> outputs
//

AudioInputI2S audioInput; // audio shield: mic or line-in
AudioOutputI2S audioOutput; // audio shield: headphones & line-out



// Create Audio connections between the components
//
AudioConnection c1(audioInput, 0, audioOutput, 0); // left passing through
AudioConnection c2(audioInput, 1, audioOutput, 1); // right passing through

// Create an object to control the audio shield.
//
AudioControlSGTL5000 audioShield;

void setup() {
// Audio connections require memory to work. For more
// detailed information, see the MemoryAndCpuUsage example
AudioMemory(6);
// Enable the audio shield and set the output volume.
audioShield.enable();
audioShield.inputSelect(myInput);
audioShield.volume(90);
audioShield.unmuteLineout();
}

elapsedMillis chgMsec=0;
float lastVol=1024;
float lastBal=1024;

void loop() {
// every 10 ms, check for adjustment the balance & vol
if (chgMsec > 10) { // more regular updates for actual changes seems better.
#if PIN_BALANCE
float bal1=analogRead(PIN_BALANCE);
#else
float bal1=0; // middle will be default if analog pin is not supplied
#endif
bal1=((bal1-512)/512)*100;
bal1=(int)bal1;
if(lastBal!=bal1)
{
if(bal1<0)
{ // leaning toward left...
audioShield.dac_vol(100,100+bal1);
} else if(bal1>0) { // to the right
audioShield.dac_vol(100-bal1,100);
} else { // middle
audioShield.dac_vol(100);
}
lastBal=bal1;
}

#if PIN_VOLUME
float vol1=analogRead(PIN_VOLUME)/10.23; // 0 - 100
#else
float vol1=70; // 70% output will be default if analog pin is not supplied.
#endif
vol1=(int)vol1;
if(lastVol!=vol1)
{
audioShield.volume(vol1);
lastVol=vol1;
}
chgMsec = 0;
}
}


+ 80
- 0
examples/SGTL5000_Specific/balanceHP/balanceHP.ino 查看文件

@@ -0,0 +1,80 @@
// HP balance example: Will influence both HP & LO outputs.

#include <Audio.h>
#include <Wire.h>
#include <SD.h>

#define PIN_VOLUME 0
#define PIN_BALANCE 15

const int myInput = AUDIO_INPUT_LINEIN;
// const int myInput = AUDIO_INPUT_MIC;

// Create the Audio components. These should be created in the
// order data flows, inputs/sources -> processing -> outputs
//

AudioInputI2S audioInput; // audio shield: mic or line-in
AudioOutputI2S audioOutput; // audio shield: headphones & line-out



// Create Audio connections between the components

// Just connecting in to out
AudioConnection c1(audioInput, 0, audioOutput, 0); // left connection
AudioConnection c2(audioInput, 1, audioOutput, 1); // right connection

// Create an object to control the audio shield.
//
AudioControlSGTL5000 audioShield;

void setup() {
// Audio connections require memory to work. For more
// detailed information, see the MemoryAndCpuUsage example
AudioMemory(12);
// Enable the audio shield and set the output volume.
audioShield.enable();
audioShield.inputSelect(myInput);
audioShield.volume(60);
audioShield.unmuteLineout();
}

elapsedMillis chgMsec=0;

float lastVol=1024;
float lastBal=1024;

void loop() {
// every 10 ms, check for adjustment the balance & vol
if (chgMsec > 10) { // more regular updates for actual changes seems better.

#if PIN_VOLUME
float vol1=analogRead(PIN_VOLUME)/10.23; // 0 - 1000
#else
float vol1=70; // 70% output will be default if analog pin is not supplied.
#endif
vol1=(int)vol1;

#if PIN_BALANCE
float bal1=analogRead(PIN_BALANCE);
#else
float bal1=0; // middle will be default if analog pin is not supplied
#endif
bal1=((bal1-512)/512)*100;
bal1=(int)bal1;
if((lastVol!=vol1)||(lastBal!=bal1))
{
if(bal1<0)
{
audioShield.volume(vol1,(vol1/100)*(100+bal1));
} else {
audioShield.volume((vol1/100)*(100-bal1),vol1);
}
lastVol=vol1;
lastBal=bal1;
}
chgMsec = 0;
}
}


Loading…
取消
儲存