mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-10-10 16:43:35 +02:00
2014-09-16 Fred Gleason <fredg@paravelsystems.com>
* Fixed a bug in 'cae/cae_alsa.cpp' that caused induced noise when routing passthrough audio. * Reversed format detection order so as to prefer S32_LE format over S16_LE in 'cae/cae_alsa.cpp'.
This commit is contained in:
@@ -14461,3 +14461,8 @@
|
|||||||
entries to appear in the list of available matrix output sources.
|
entries to appear in the list of available matrix output sources.
|
||||||
2014-09-13 Fred Gleason <fredg@paravelsystems.com>
|
2014-09-13 Fred Gleason <fredg@paravelsystems.com>
|
||||||
* Incremented the package version to 2.9.2int00.
|
* Incremented the package version to 2.9.2int00.
|
||||||
|
2014-09-16 Fred Gleason <fredg@paravelsystems.com>
|
||||||
|
* Fixed a bug in 'cae/cae_alsa.cpp' that caused induced noise
|
||||||
|
when routing passthrough audio.
|
||||||
|
* Reversed format detection order so as to prefer S32_LE format
|
||||||
|
over S16_LE in 'cae/cae_alsa.cpp'.
|
||||||
|
257
cae/cae_alsa.cpp
257
cae/cae_alsa.cpp
@@ -68,7 +68,8 @@ void AlsaCapture2Callback(struct alsa_format *alsa_format)
|
|||||||
{
|
{
|
||||||
char alsa_buffer[RINGBUFFER_SIZE];
|
char alsa_buffer[RINGBUFFER_SIZE];
|
||||||
int modulo;
|
int modulo;
|
||||||
short in_meter[RD_MAX_PORTS][2];
|
int16_t in_meter[RD_MAX_PORTS][2];
|
||||||
|
|
||||||
|
|
||||||
while(!alsa_format->exiting) {
|
while(!alsa_format->exiting) {
|
||||||
int s=snd_pcm_readi(alsa_format->pcm,alsa_format->card_buffer,
|
int s=snd_pcm_readi(alsa_format->pcm,alsa_format->card_buffer,
|
||||||
@@ -91,35 +92,35 @@ void AlsaCapture2Callback(struct alsa_format *alsa_format)
|
|||||||
switch(alsa_input_channels[alsa_format->card][i]) {
|
switch(alsa_input_channels[alsa_format->card][i]) {
|
||||||
case 1:
|
case 1:
|
||||||
for(int k=0;k<(2*s);k++) {
|
for(int k=0;k<(2*s);k++) {
|
||||||
((short *)alsa_buffer)[k]=
|
((int16_t *)alsa_buffer)[k]=
|
||||||
(short)(alsa_input_volume[alsa_format->card][i]*
|
(int16_t)(alsa_input_volume[alsa_format->card][i]*
|
||||||
(double)(((short *)alsa_format->
|
(double)(((int16_t *)alsa_format->
|
||||||
card_buffer)
|
card_buffer)
|
||||||
[modulo*k+2*i]))+
|
[modulo*k+2*i]))+
|
||||||
(short)(alsa_input_volume[alsa_format->card][i]*
|
(int16_t)(alsa_input_volume[alsa_format->card][i]*
|
||||||
(double)(((short *)alsa_format->
|
(double)(((int16_t *)alsa_format->
|
||||||
card_buffer)
|
card_buffer)
|
||||||
[modulo*k+2*i+1]));
|
[modulo*k+2*i+1]));
|
||||||
}
|
}
|
||||||
alsa_record_ring[alsa_format->card][i]->
|
alsa_record_ring[alsa_format->card][i]->
|
||||||
write(alsa_buffer,s*sizeof(short));
|
write(alsa_buffer,s*sizeof(int16_t));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
for(int k=0;k<s;k++) {
|
for(int k=0;k<s;k++) {
|
||||||
((short *)alsa_buffer)[2*k]=
|
((int16_t *)alsa_buffer)[2*k]=
|
||||||
(short)(alsa_input_volume[alsa_format->card][i]*
|
(int16_t)(alsa_input_volume[alsa_format->card][i]*
|
||||||
(double)(((short *)alsa_format->
|
(double)(((int16_t *)alsa_format->
|
||||||
card_buffer)
|
card_buffer)
|
||||||
[modulo*k+2*i]));
|
[modulo*k+2*i]));
|
||||||
((short *)alsa_buffer)[2*k+1]=
|
((int16_t *)alsa_buffer)[2*k+1]=
|
||||||
(short)(alsa_input_volume[alsa_format->card][i]*
|
(int16_t)(alsa_input_volume[alsa_format->card][i]*
|
||||||
(double)(((short *)alsa_format->
|
(double)(((int16_t *)alsa_format->
|
||||||
card_buffer)
|
card_buffer)
|
||||||
[modulo*k+2*i+1]));
|
[modulo*k+2*i+1]));
|
||||||
}
|
}
|
||||||
alsa_record_ring[alsa_format->card][i]->
|
alsa_record_ring[alsa_format->card][i]->
|
||||||
write(alsa_buffer,s*2*sizeof(short));
|
write(alsa_buffer,s*2*sizeof(int16_t));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -132,20 +133,15 @@ void AlsaCapture2Callback(struct alsa_format *alsa_format)
|
|||||||
for(unsigned i=0;i<alsa_format->channels;i+=2) {
|
for(unsigned i=0;i<alsa_format->channels;i+=2) {
|
||||||
for(unsigned j=0;j<2;j++) {
|
for(unsigned j=0;j<2;j++) {
|
||||||
for(int k=0;k<s;k++) {
|
for(int k=0;k<s;k++) {
|
||||||
((short *)alsa_format->passthrough_buffer)[2*k+j]=
|
((int16_t *)alsa_format->passthrough_buffer)[2*k+j]=
|
||||||
((short *)alsa_format->
|
((int16_t *)alsa_format->
|
||||||
card_buffer)[alsa_format->channels*k+2*i+j];
|
card_buffer)[alsa_format->channels*k+i+j];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(alsa_passthrough_ring[alsa_format->card][i/2]==NULL) {
|
|
||||||
printf("RING ERROR Card=%d Port=%d\n",alsa_format->card,i/2);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
alsa_passthrough_ring[alsa_format->card][i/2]->
|
alsa_passthrough_ring[alsa_format->card][i/2]->
|
||||||
write(alsa_format->passthrough_buffer,4*s);
|
write(alsa_format->passthrough_buffer,4*s);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Process Input Meters
|
// Process Input Meters
|
||||||
//
|
//
|
||||||
@@ -153,11 +149,11 @@ void AlsaCapture2Callback(struct alsa_format *alsa_format)
|
|||||||
for(unsigned j=0;j<2;j++) {
|
for(unsigned j=0;j<2;j++) {
|
||||||
in_meter[i/2][j]=0;
|
in_meter[i/2][j]=0;
|
||||||
for(int k=0;k<s;k++) {
|
for(int k=0;k<s;k++) {
|
||||||
if(((short *)alsa_format->
|
if(((int16_t *)alsa_format->
|
||||||
card_buffer)[alsa_format->channels*k+2*i+j]>
|
card_buffer)[alsa_format->channels*k+2*i+j]>
|
||||||
in_meter[i][j]) {
|
in_meter[i][j]) {
|
||||||
in_meter[i][j]=
|
in_meter[i][j]=
|
||||||
((short *)alsa_format->
|
((int16_t *)alsa_format->
|
||||||
card_buffer)[alsa_format->channels*k+2*i+j];
|
card_buffer)[alsa_format->channels*k+2*i+j];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -175,33 +171,33 @@ void AlsaCapture2Callback(struct alsa_format *alsa_format)
|
|||||||
switch(alsa_input_channels[alsa_format->card][i]) {
|
switch(alsa_input_channels[alsa_format->card][i]) {
|
||||||
case 1:
|
case 1:
|
||||||
for(int k=0;k<(2*s);k++) {
|
for(int k=0;k<(2*s);k++) {
|
||||||
((short *)alsa_buffer)[k]=
|
((int16_t *)alsa_buffer)[k]=
|
||||||
(short)(alsa_input_volume[alsa_format->card][i]*
|
(int16_t)(alsa_input_volume[alsa_format->card][i]*
|
||||||
(double)(((short *)alsa_format->
|
(double)(((int16_t *)alsa_format->
|
||||||
card_buffer)
|
card_buffer)
|
||||||
[modulo*k+4*i+1]))+
|
[modulo*k+4*i+1]))+
|
||||||
(short)(alsa_input_volume[alsa_format->card][i]*
|
(int16_t)(alsa_input_volume[alsa_format->card][i]*
|
||||||
(double)(((short *)alsa_format->
|
(double)(((int16_t *)alsa_format->
|
||||||
card_buffer)
|
card_buffer)
|
||||||
[modulo*k+4*i+3]));
|
[modulo*k+4*i+3]));
|
||||||
}
|
}
|
||||||
alsa_record_ring[alsa_format->card][i]->
|
alsa_record_ring[alsa_format->card][i]->
|
||||||
write(alsa_buffer,s*sizeof(short));
|
write(alsa_buffer,s*sizeof(int16_t));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
for(int k=0;k<s;k++) {
|
for(int k=0;k<s;k++) {
|
||||||
((short *)alsa_buffer)[2*k]=
|
((int16_t *)alsa_buffer)[2*k]=
|
||||||
(short)(alsa_input_volume[alsa_format->card][i]*
|
(int16_t)(alsa_input_volume[alsa_format->card][i]*
|
||||||
(double)(((short *)alsa_format->card_buffer)
|
(double)(((int16_t *)alsa_format->card_buffer)
|
||||||
[modulo*k+4*i+1]));
|
[modulo*k+4*i+1]));
|
||||||
((short *)alsa_buffer)[2*k+1]=
|
((int16_t *)alsa_buffer)[2*k+1]=
|
||||||
(short)(alsa_input_volume[alsa_format->card][i]*
|
(int16_t)(alsa_input_volume[alsa_format->card][i]*
|
||||||
(double)(((short *)alsa_format->card_buffer)
|
(double)(((int16_t *)alsa_format->card_buffer)
|
||||||
[modulo*k+4*i+3]));
|
[modulo*k+4*i+3]));
|
||||||
}
|
}
|
||||||
alsa_record_ring[alsa_format->card][i]->
|
alsa_record_ring[alsa_format->card][i]->
|
||||||
write(alsa_buffer,s*2*sizeof(short));
|
write(alsa_buffer,s*2*sizeof(int16_t));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -214,15 +210,15 @@ void AlsaCapture2Callback(struct alsa_format *alsa_format)
|
|||||||
for(unsigned i=0;i<alsa_format->channels;i+=2) {
|
for(unsigned i=0;i<alsa_format->channels;i+=2) {
|
||||||
for(unsigned j=0;j<2;j++) {
|
for(unsigned j=0;j<2;j++) {
|
||||||
for(int k=0;k<s;k++) {
|
for(int k=0;k<s;k++) {
|
||||||
((short *)alsa_format->passthrough_buffer)[2*k+j]=
|
((int32_t *)alsa_format->passthrough_buffer)[2*k+j]=
|
||||||
((short *)alsa_format->
|
((int32_t *)alsa_format->
|
||||||
card_buffer)[alsa_format->channels*2*k+2*i+1+2*j];
|
card_buffer)[alsa_format->channels*k+i+j];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
alsa_passthrough_ring[alsa_format->card][i/2]->
|
alsa_passthrough_ring[alsa_format->card][i/2]->
|
||||||
write(alsa_format->passthrough_buffer,4*s);
|
write(alsa_format->passthrough_buffer,8*s);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Process Input Meters
|
// Process Input Meters
|
||||||
//
|
//
|
||||||
@@ -230,11 +226,11 @@ void AlsaCapture2Callback(struct alsa_format *alsa_format)
|
|||||||
for(unsigned j=0;j<2;j++) {
|
for(unsigned j=0;j<2;j++) {
|
||||||
in_meter[i/2][j]=0;
|
in_meter[i/2][j]=0;
|
||||||
for(int k=0;k<s;k++) {
|
for(int k=0;k<s;k++) {
|
||||||
if(((short *)alsa_format->
|
if(((int16_t *)alsa_format->
|
||||||
card_buffer)[alsa_format->channels*2*k+2*i+1+2*j]>
|
card_buffer)[alsa_format->channels*2*k+2*i+1+2*j]>
|
||||||
in_meter[i/2][j]) {
|
in_meter[i/2][j]) {
|
||||||
in_meter[i/2][j]=
|
in_meter[i/2][j]=
|
||||||
((short *)alsa_format->
|
((int16_t *)alsa_format->
|
||||||
card_buffer)[alsa_format->channels*2*k+2*i+1+2*j];
|
card_buffer)[alsa_format->channels*2*k+2*i+1+2*j];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -283,8 +279,8 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format)
|
|||||||
int p;
|
int p;
|
||||||
char alsa_buffer[RINGBUFFER_SIZE];
|
char alsa_buffer[RINGBUFFER_SIZE];
|
||||||
int modulo;
|
int modulo;
|
||||||
short out_meter[RD_MAX_PORTS][2];
|
int16_t out_meter[RD_MAX_PORTS][2];
|
||||||
short stream_out_meter=0;
|
int16_t stream_out_meter=0;
|
||||||
|
|
||||||
while(!alsa_format->exiting) {
|
while(!alsa_format->exiting) {
|
||||||
memset(alsa_format->card_buffer,0,alsa_format->card_buffer_size);
|
memset(alsa_format->card_buffer,0,alsa_format->card_buffer_size);
|
||||||
@@ -298,11 +294,11 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format)
|
|||||||
n=alsa_play_ring[alsa_format->card][j]->
|
n=alsa_play_ring[alsa_format->card][j]->
|
||||||
read(alsa_buffer,alsa_format->
|
read(alsa_buffer,alsa_format->
|
||||||
buffer_size/alsa_format->periods)/
|
buffer_size/alsa_format->periods)/
|
||||||
(2*sizeof(short));
|
(2*sizeof(int16_t));
|
||||||
stream_out_meter=0; // Stream Output Meters
|
stream_out_meter=0; // Stream Output Meters
|
||||||
for(int k=0;k<n;k++) {
|
for(int k=0;k<n;k++) {
|
||||||
if(abs(((short *)alsa_buffer)[k])>stream_out_meter) {
|
if(abs(((int16_t *)alsa_buffer)[k])>stream_out_meter) {
|
||||||
stream_out_meter=abs(((short *)alsa_buffer)[k]);
|
stream_out_meter=abs(((int16_t *)alsa_buffer)[k]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
alsa_stream_output_meter[alsa_format->card][j][0]->
|
alsa_stream_output_meter[alsa_format->card][j][0]->
|
||||||
@@ -313,12 +309,12 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format)
|
|||||||
for(unsigned i=0;i<(alsa_format->channels/2);i++) {
|
for(unsigned i=0;i<(alsa_format->channels/2);i++) {
|
||||||
if(alsa_output_volume[alsa_format->card][i][j]!=0.0) {
|
if(alsa_output_volume[alsa_format->card][i][j]!=0.0) {
|
||||||
for(int k=0;k<(2*n);k++) {
|
for(int k=0;k<(2*n);k++) {
|
||||||
((short *)alsa_format->card_buffer)[modulo*k+2*i]+=
|
((int16_t *)alsa_format->card_buffer)[modulo*k+2*i]+=
|
||||||
(short)(alsa_output_volume[alsa_format->card][i][j]*
|
(int16_t)(alsa_output_volume[alsa_format->card][i][j]*
|
||||||
(double)(((short *)alsa_buffer)[k]));
|
(double)(((int16_t *)alsa_buffer)[k]));
|
||||||
((short *)alsa_format->card_buffer)[modulo*k+2*i+1]+=
|
((int16_t *)alsa_format->card_buffer)[modulo*k+2*i+1]+=
|
||||||
(short)(alsa_output_volume[alsa_format->card][i][j]*
|
(int16_t)(alsa_output_volume[alsa_format->card][i][j]*
|
||||||
(double)(((short *)alsa_buffer)[k]));
|
(double)(((int16_t *)alsa_buffer)[k]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -328,12 +324,12 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format)
|
|||||||
case 2:
|
case 2:
|
||||||
n=alsa_play_ring[alsa_format->card][j]->
|
n=alsa_play_ring[alsa_format->card][j]->
|
||||||
read(alsa_buffer,alsa_format->buffer_size*2/
|
read(alsa_buffer,alsa_format->buffer_size*2/
|
||||||
alsa_format->periods)/(2*sizeof(short));
|
alsa_format->periods)/(2*sizeof(int16_t));
|
||||||
for(unsigned k=0;k<2;k++) { // Stream Output Meters
|
for(unsigned k=0;k<2;k++) { // Stream Output Meters
|
||||||
stream_out_meter=0;
|
stream_out_meter=0;
|
||||||
for(int l=0;l<n;l+=2) {
|
for(int l=0;l<n;l+=2) {
|
||||||
if(abs(((short *)alsa_buffer)[l+k])>stream_out_meter) {
|
if(abs(((int16_t *)alsa_buffer)[l+k])>stream_out_meter) {
|
||||||
stream_out_meter=abs(((short *)alsa_buffer)[l+k]);
|
stream_out_meter=abs(((int16_t *)alsa_buffer)[l+k]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
alsa_stream_output_meter[alsa_format->card][j][k]->
|
alsa_stream_output_meter[alsa_format->card][j][k]->
|
||||||
@@ -343,12 +339,12 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format)
|
|||||||
for(unsigned i=0;i<(alsa_format->channels/2);i++) {
|
for(unsigned i=0;i<(alsa_format->channels/2);i++) {
|
||||||
if(alsa_output_volume[alsa_format->card][i][j]!=0.0) {
|
if(alsa_output_volume[alsa_format->card][i][j]!=0.0) {
|
||||||
for(int k=0;k<n;k++) {
|
for(int k=0;k<n;k++) {
|
||||||
((short *)alsa_format->card_buffer)[modulo*k+2*i]+=
|
((int16_t *)alsa_format->card_buffer)[modulo*k+2*i]+=
|
||||||
(short)(alsa_output_volume[alsa_format->card][i][j]*
|
(int16_t)(alsa_output_volume[alsa_format->card][i][j]*
|
||||||
(double)(((short *)alsa_buffer)[2*k]));
|
(double)(((int16_t *)alsa_buffer)[2*k]));
|
||||||
((short *)alsa_format->card_buffer)[modulo*k+2*i+1]+=
|
((int16_t *)alsa_format->card_buffer)[modulo*k+2*i+1]+=
|
||||||
(short)(alsa_output_volume[alsa_format->card][i][j]*
|
(int16_t)(alsa_output_volume[alsa_format->card][i][j]*
|
||||||
(double)(((short *)alsa_buffer)[2*k+1]));
|
(double)(((int16_t *)alsa_buffer)[2*k+1]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -369,15 +365,13 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format)
|
|||||||
p=alsa_passthrough_ring[alsa_format->card][i/2]->
|
p=alsa_passthrough_ring[alsa_format->card][i/2]->
|
||||||
read(alsa_format->passthrough_buffer,4*n)/4;
|
read(alsa_format->passthrough_buffer,4*n)/4;
|
||||||
for(unsigned j=0;j<alsa_format->channels;j+=2) {
|
for(unsigned j=0;j<alsa_format->channels;j+=2) {
|
||||||
if(alsa_passthrough_volume[alsa_format->card][i/2][j/2]>0.0) {
|
for(unsigned k=0;k<2;k++) {
|
||||||
for(unsigned k=0;k<2;k++) {
|
for(int l=0;l<p;l++) {
|
||||||
for(int l=0;l<p;l++) {
|
((int16_t *)alsa_format->
|
||||||
((short *)alsa_format->
|
card_buffer)[alsa_format->channels*l+j+k]+=
|
||||||
card_buffer)[alsa_format->channels*l+4*j+1+k]+=(short)
|
(int16_t)((double)((int16_t *)
|
||||||
((double)((short *)alsa_format->
|
alsa_format->passthrough_buffer)[2*l+k]*
|
||||||
passthrough_buffer)[2*l+1]*
|
alsa_passthrough_volume[alsa_format->card][i/2][j/2]);
|
||||||
alsa_passthrough_volume[alsa_format->card][i/2][j/2]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -391,11 +385,11 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format)
|
|||||||
for(unsigned j=0;j<2;j++) {
|
for(unsigned j=0;j<2;j++) {
|
||||||
out_meter[port][j]=0;
|
out_meter[port][j]=0;
|
||||||
for(unsigned k=0;k<alsa_format->buffer_size;k++) {
|
for(unsigned k=0;k<alsa_format->buffer_size;k++) {
|
||||||
if(((short *)alsa_format->
|
if(((int16_t *)alsa_format->
|
||||||
card_buffer)[alsa_format->channels*k+2*i+j]>
|
card_buffer)[alsa_format->channels*k+2*i+j]>
|
||||||
out_meter[i][j]) {
|
out_meter[i][j]) {
|
||||||
out_meter[i][j]=
|
out_meter[i][j]=
|
||||||
((short *)alsa_format->
|
((int16_t *)alsa_format->
|
||||||
card_buffer)[alsa_format->channels*k+2*i+j];
|
card_buffer)[alsa_format->channels*k+2*i+j];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -412,11 +406,11 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format)
|
|||||||
case 1:
|
case 1:
|
||||||
n=alsa_play_ring[alsa_format->card][j]->
|
n=alsa_play_ring[alsa_format->card][j]->
|
||||||
read(alsa_buffer,alsa_format->buffer_size/
|
read(alsa_buffer,alsa_format->buffer_size/
|
||||||
alsa_format->periods)/(2*sizeof(short));
|
alsa_format->periods)/(2*sizeof(int16_t));
|
||||||
stream_out_meter=0;
|
stream_out_meter=0;
|
||||||
for(int k=0;k<n;k++) { // Stream Output Meters
|
for(int k=0;k<n;k++) { // Stream Output Meters
|
||||||
if(abs(((short *)alsa_buffer)[k])>stream_out_meter) {
|
if(abs(((int16_t *)alsa_buffer)[k])>stream_out_meter) {
|
||||||
stream_out_meter=abs(((short *)alsa_buffer)[k]);
|
stream_out_meter=abs(((int16_t *)alsa_buffer)[k]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
alsa_stream_output_meter[alsa_format->card][j][0]->
|
alsa_stream_output_meter[alsa_format->card][j][0]->
|
||||||
@@ -427,12 +421,12 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format)
|
|||||||
for(unsigned i=0;i<(alsa_format->channels/2);i++) {
|
for(unsigned i=0;i<(alsa_format->channels/2);i++) {
|
||||||
if(alsa_output_volume[alsa_format->card][i][j]!=0.0) {
|
if(alsa_output_volume[alsa_format->card][i][j]!=0.0) {
|
||||||
for(int k=0;k<(2*n);k++) {
|
for(int k=0;k<(2*n);k++) {
|
||||||
((short *)alsa_format->card_buffer)[modulo*k+4*i+1]+=
|
((int16_t *)alsa_format->card_buffer)[modulo*k+4*i+1]+=
|
||||||
(short)(alsa_output_volume[alsa_format->card][i][j]*
|
(int16_t)(alsa_output_volume[alsa_format->card][i][j]*
|
||||||
(double)(((short *)alsa_buffer)[k]));
|
(double)(((int16_t *)alsa_buffer)[k]));
|
||||||
((short *)alsa_format->card_buffer)[modulo*k+4*i+3]+=
|
((int16_t *)alsa_format->card_buffer)[modulo*k+4*i+3]+=
|
||||||
(short)(alsa_output_volume[alsa_format->card][i][j]*
|
(int16_t)(alsa_output_volume[alsa_format->card][i][j]*
|
||||||
(double)(((short *)alsa_buffer)[k]));
|
(double)(((int16_t *)alsa_buffer)[k]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -442,12 +436,12 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format)
|
|||||||
case 2:
|
case 2:
|
||||||
n=alsa_play_ring[alsa_format->card][j]->
|
n=alsa_play_ring[alsa_format->card][j]->
|
||||||
read(alsa_buffer,alsa_format->buffer_size*2/
|
read(alsa_buffer,alsa_format->buffer_size*2/
|
||||||
alsa_format->periods)/(2*sizeof(short));
|
alsa_format->periods)/(2*sizeof(int16_t));
|
||||||
for(unsigned k=0;k<2;k++) { // Stream Output Meters
|
for(unsigned k=0;k<2;k++) { // Stream Output Meters
|
||||||
stream_out_meter=0;
|
stream_out_meter=0;
|
||||||
for(int l=0;l<n;l+=2) {
|
for(int l=0;l<n;l+=2) {
|
||||||
if(abs(((short *)alsa_buffer)[l+k])>stream_out_meter) {
|
if(abs(((int16_t *)alsa_buffer)[l+k])>stream_out_meter) {
|
||||||
stream_out_meter=abs(((short *)alsa_buffer)[l+k]);
|
stream_out_meter=abs(((int16_t *)alsa_buffer)[l+k]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
alsa_stream_output_meter[alsa_format->card][j][k]->
|
alsa_stream_output_meter[alsa_format->card][j][k]->
|
||||||
@@ -457,12 +451,12 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format)
|
|||||||
for(unsigned i=0;i<(alsa_format->channels/2);i++) {
|
for(unsigned i=0;i<(alsa_format->channels/2);i++) {
|
||||||
if(alsa_output_volume[alsa_format->card][i][j]!=0.0) {
|
if(alsa_output_volume[alsa_format->card][i][j]!=0.0) {
|
||||||
for(int k=0;k<n;k++) {
|
for(int k=0;k<n;k++) {
|
||||||
((short *)alsa_format->card_buffer)[modulo*k+4*i+1]+=
|
((int16_t *)alsa_format->card_buffer)[modulo*k+4*i+1]+=
|
||||||
(short)(alsa_output_volume[alsa_format->card][i][j]*
|
(int16_t)(alsa_output_volume[alsa_format->card][i][j]*
|
||||||
(double)(((short *)alsa_buffer)[2*k]));
|
(double)(((int16_t *)alsa_buffer)[2*k]));
|
||||||
((short *)alsa_format->card_buffer)[modulo*k+4*i+3]+=
|
((int16_t *)alsa_format->card_buffer)[modulo*k+4*i+3]+=
|
||||||
(short)(alsa_output_volume[alsa_format->card][i][j]*
|
(int16_t)(alsa_output_volume[alsa_format->card][i][j]*
|
||||||
(double)(((short *)alsa_buffer)[2*k+1]));
|
(double)(((int16_t *)alsa_buffer)[2*k+1]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -474,7 +468,7 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format)
|
|||||||
// Empty the ring buffer
|
// Empty the ring buffer
|
||||||
while(alsa_play_ring[alsa_format->card][j]->
|
while(alsa_play_ring[alsa_format->card][j]->
|
||||||
read(alsa_buffer,alsa_format->buffer_size*2/
|
read(alsa_buffer,alsa_format->buffer_size*2/
|
||||||
alsa_format->periods)/(2*sizeof(short))>0);
|
alsa_format->periods)/(2*sizeof(int16_t))>0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -485,20 +479,15 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format)
|
|||||||
//
|
//
|
||||||
for(unsigned i=0;i<alsa_format->capture_channels;i+=2) {
|
for(unsigned i=0;i<alsa_format->capture_channels;i+=2) {
|
||||||
p=alsa_passthrough_ring[alsa_format->card][i/2]->
|
p=alsa_passthrough_ring[alsa_format->card][i/2]->
|
||||||
read(alsa_format->passthrough_buffer,4*n)/4;
|
read(alsa_format->passthrough_buffer,8*n)/8;
|
||||||
for(unsigned j=0;j<alsa_format->channels;j+=2) {
|
for(unsigned j=0;j<alsa_format->channels;j+=2) {
|
||||||
if(alsa_passthrough_volume[alsa_format->card][i/2][j/2]>0.0) {
|
for(unsigned k=0;k<2;k++) {
|
||||||
for(unsigned k=0;k<2;k++) {
|
for(int l=0;l<p;l++) {
|
||||||
for(int l=0;l<p;l++) {
|
((int32_t *)alsa_format->
|
||||||
((short *)alsa_format->
|
card_buffer)[alsa_format->channels*l+j+k]+=
|
||||||
card_buffer)[alsa_format->channels*2*l+4*j+1+2*k]+=
|
(int32_t)((double)((int32_t *)
|
||||||
(short)((double)
|
alsa_format->passthrough_buffer)[2*l+k]*
|
||||||
((short *)alsa_format->passthrough_buffer)[2*l]*
|
alsa_passthrough_volume[alsa_format->card][i/2][j/2]);
|
||||||
alsa_passthrough_volume[alsa_format->card][i/2][j/2]);
|
|
||||||
((short *)alsa_format->
|
|
||||||
card_buffer)[alsa_format->channels*2*l+4*j+3+2*k]+=
|
|
||||||
((short *)alsa_format->passthrough_buffer)[2*l+1];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -514,11 +503,11 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format)
|
|||||||
for(unsigned k=0;
|
for(unsigned k=0;
|
||||||
k<(alsa_format->buffer_size*2/alsa_format->periods);
|
k<(alsa_format->buffer_size*2/alsa_format->periods);
|
||||||
k++) {
|
k++) {
|
||||||
if(((short *)alsa_format->
|
if(((int16_t *)alsa_format->
|
||||||
card_buffer)[alsa_format->channels*2*k+2*i+1+2*j]>
|
card_buffer)[alsa_format->channels*2*k+2*i+1+2*j]>
|
||||||
out_meter[port][j]) {
|
out_meter[port][j]) {
|
||||||
out_meter[port][j]=
|
out_meter[port][j]=
|
||||||
((short *)alsa_format->
|
((int16_t *)alsa_format->
|
||||||
card_buffer)[alsa_format->channels*2*k+2*i+1+2*j];
|
card_buffer)[alsa_format->channels*2*k+2*i+1+2*j];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -628,7 +617,7 @@ void MainObject::alsaFadeTimerData(int cardstream)
|
|||||||
#ifdef ALSA
|
#ifdef ALSA
|
||||||
int card=cardstream/RD_MAX_STREAMS;
|
int card=cardstream/RD_MAX_STREAMS;
|
||||||
int stream=cardstream-card*RD_MAX_STREAMS;
|
int stream=cardstream-card*RD_MAX_STREAMS;
|
||||||
short level;
|
int16_t level;
|
||||||
if(alsa_fade_up[card][stream]) {
|
if(alsa_fade_up[card][stream]) {
|
||||||
level=alsa_output_volume_db[card][alsa_fade_port[card][stream]][stream]+
|
level=alsa_output_volume_db[card][alsa_fade_port[card][stream]][stream]+
|
||||||
alsa_fade_increment[card][stream];
|
alsa_fade_increment[card][stream];
|
||||||
@@ -727,8 +716,8 @@ void MainObject::alsaInit(RDStation *station)
|
|||||||
// Allocate Temporary Buffers
|
// Allocate Temporary Buffers
|
||||||
//
|
//
|
||||||
AlsaInitCallback();
|
AlsaInitCallback();
|
||||||
alsa_wave_buffer=new short[RINGBUFFER_SIZE];
|
alsa_wave_buffer=new int16_t[RINGBUFFER_SIZE];
|
||||||
//alsa_resample_buffer=new short[2*RINGBUFFER_SIZE];
|
//alsa_resample_buffer=new int16_t[2*RINGBUFFER_SIZE];
|
||||||
|
|
||||||
//
|
//
|
||||||
// Start Up Interfaces
|
// Start Up Interfaces
|
||||||
@@ -1275,7 +1264,7 @@ bool MainObject::alsaGetInputStatus(int card,int port)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool MainObject::alsaGetInputMeters(int card,int port,short levels[2])
|
bool MainObject::alsaGetInputMeters(int card,int port,int16_t levels[2])
|
||||||
{
|
{
|
||||||
#ifdef ALSA
|
#ifdef ALSA
|
||||||
double meter;
|
double meter;
|
||||||
@@ -1287,7 +1276,7 @@ bool MainObject::alsaGetInputMeters(int card,int port,short levels[2])
|
|||||||
levels[i]=-10000;
|
levels[i]=-10000;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
levels[i]=(short)(2000.0*log10(meter));
|
levels[i]=(int16_t)(2000.0*log10(meter));
|
||||||
if(levels[i]<-10000) {
|
if(levels[i]<-10000) {
|
||||||
levels[i]=-10000;
|
levels[i]=-10000;
|
||||||
}
|
}
|
||||||
@@ -1300,7 +1289,7 @@ bool MainObject::alsaGetInputMeters(int card,int port,short levels[2])
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool MainObject::alsaGetOutputMeters(int card,int port,short levels[2])
|
bool MainObject::alsaGetOutputMeters(int card,int port,int16_t levels[2])
|
||||||
{
|
{
|
||||||
#ifdef ALSA
|
#ifdef ALSA
|
||||||
double meter;
|
double meter;
|
||||||
@@ -1311,7 +1300,7 @@ bool MainObject::alsaGetOutputMeters(int card,int port,short levels[2])
|
|||||||
levels[i]=-10000;
|
levels[i]=-10000;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
levels[i]=(short)(2000.0*log10(meter));
|
levels[i]=(int16_t)(2000.0*log10(meter));
|
||||||
if(levels[i]<-10000) {
|
if(levels[i]<-10000) {
|
||||||
levels[i]=-10000;
|
levels[i]=-10000;
|
||||||
}
|
}
|
||||||
@@ -1324,7 +1313,7 @@ bool MainObject::alsaGetOutputMeters(int card,int port,short levels[2])
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool MainObject::alsaGetStreamOutputMeters(int card,int stream,short levels[2])
|
bool MainObject::alsaGetStreamOutputMeters(int card,int stream,int16_t levels[2])
|
||||||
{
|
{
|
||||||
#ifdef ALSA
|
#ifdef ALSA
|
||||||
double meter;
|
double meter;
|
||||||
@@ -1335,7 +1324,7 @@ bool MainObject::alsaGetStreamOutputMeters(int card,int stream,short levels[2])
|
|||||||
levels[i]=-10000;
|
levels[i]=-10000;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
levels[i]=(short)(2000.0*log10(meter));
|
levels[i]=(int16_t)(2000.0*log10(meter));
|
||||||
if(levels[i]<-10000) {
|
if(levels[i]<-10000) {
|
||||||
levels[i]=-10000;
|
levels[i]=-10000;
|
||||||
}
|
}
|
||||||
@@ -1418,14 +1407,14 @@ bool MainObject::AlsaStartCaptureDevice(QString &dev,int card,snd_pcm_t *pcm)
|
|||||||
//
|
//
|
||||||
// Sample Format
|
// Sample Format
|
||||||
//
|
//
|
||||||
if(snd_pcm_hw_params_test_format(pcm,hwparams,SND_PCM_FORMAT_S16_LE)==0) {
|
if(snd_pcm_hw_params_test_format(pcm,hwparams,SND_PCM_FORMAT_S32_LE)==0) {
|
||||||
alsa_capture_format[card].format=SND_PCM_FORMAT_S16_LE;
|
alsa_capture_format[card].format=SND_PCM_FORMAT_S32_LE;
|
||||||
LogLine(RDConfig::LogDebug," Format = 16 bit little-endian");
|
LogLine(RDConfig::LogDebug," Format = 32 bit little-endian");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(snd_pcm_hw_params_test_format(pcm,hwparams,SND_PCM_FORMAT_S32_LE)==0) {
|
if(snd_pcm_hw_params_test_format(pcm,hwparams,SND_PCM_FORMAT_S16_LE)==0) {
|
||||||
alsa_capture_format[card].format=SND_PCM_FORMAT_S32_LE;
|
alsa_capture_format[card].format=SND_PCM_FORMAT_S16_LE;
|
||||||
LogLine(RDConfig::LogDebug," Format = 32 bit little-endian");
|
LogLine(RDConfig::LogDebug," Format = 16 bit little-endian");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
LogLine(RDConfig::LogErr,
|
LogLine(RDConfig::LogErr,
|
||||||
@@ -1581,14 +1570,14 @@ bool MainObject::AlsaStartPlayDevice(QString &dev,int card,snd_pcm_t *pcm)
|
|||||||
//
|
//
|
||||||
// Sample Format
|
// Sample Format
|
||||||
//
|
//
|
||||||
if(snd_pcm_hw_params_test_format(pcm,hwparams,SND_PCM_FORMAT_S16_LE)==0) {
|
if(snd_pcm_hw_params_test_format(pcm,hwparams,SND_PCM_FORMAT_S32_LE)==0) {
|
||||||
alsa_play_format[card].format=SND_PCM_FORMAT_S16_LE;
|
alsa_play_format[card].format=SND_PCM_FORMAT_S32_LE;
|
||||||
LogLine(RDConfig::LogDebug," Format = 16 bit little-endian");
|
LogLine(RDConfig::LogDebug," Format = 32 bit little-endian");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(snd_pcm_hw_params_test_format(pcm,hwparams,SND_PCM_FORMAT_S32_LE)==0) {
|
if(snd_pcm_hw_params_test_format(pcm,hwparams,SND_PCM_FORMAT_S16_LE)==0) {
|
||||||
alsa_play_format[card].format=SND_PCM_FORMAT_S32_LE;
|
alsa_play_format[card].format=SND_PCM_FORMAT_S16_LE;
|
||||||
LogLine(RDConfig::LogDebug," Format = 32 bit little-endian");
|
LogLine(RDConfig::LogDebug," Format = 16 bit little-endian");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
LogLine(RDConfig::LogErr,
|
LogLine(RDConfig::LogErr,
|
||||||
@@ -1733,7 +1722,7 @@ void MainObject::EmptyAlsaInputStream(int card,int stream)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void MainObject::WriteAlsaBuffer(int card,int stream,short *buffer,unsigned len)
|
void MainObject::WriteAlsaBuffer(int card,int stream,int16_t *buffer,unsigned len)
|
||||||
{
|
{
|
||||||
ssize_t s;
|
ssize_t s;
|
||||||
unsigned char mpeg[2048];
|
unsigned char mpeg[2048];
|
||||||
@@ -1817,7 +1806,7 @@ void MainObject::FillAlsaOutputStream(int card,int stream)
|
|||||||
for(int k=0;k<mad_synth[card][stream].pcm.channels;k++) {
|
for(int k=0;k<mad_synth[card][stream].pcm.channels;k++) {
|
||||||
alsa_wave_buffer[frame_offset+
|
alsa_wave_buffer[frame_offset+
|
||||||
j*mad_synth[card][stream].pcm.channels+k]=
|
j*mad_synth[card][stream].pcm.channels+k]=
|
||||||
(short)(32768.0*mad_f_todouble(mad_synth[card][stream].
|
(int16_t)(32768.0*mad_f_todouble(mad_synth[card][stream].
|
||||||
pcm.samples[k][j]));
|
pcm.samples[k][j]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1842,7 +1831,7 @@ void MainObject::FillAlsaOutputStream(int card,int stream)
|
|||||||
for(int k=0;k<mad_synth[card][stream].pcm.channels;k++) {
|
for(int k=0;k<mad_synth[card][stream].pcm.channels;k++) {
|
||||||
alsa_wave_buffer[frame_offset+
|
alsa_wave_buffer[frame_offset+
|
||||||
j*mad_synth[card][stream].pcm.channels+k]=
|
j*mad_synth[card][stream].pcm.channels+k]=
|
||||||
(short)(32768.0*mad_f_todouble(mad_synth[card][stream].
|
(int16_t)(32768.0*mad_f_todouble(mad_synth[card][stream].
|
||||||
pcm.samples[k][j]));
|
pcm.samples[k][j]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user