Hi, Takashi wrote
>Gerard Janssen wrote: >> >> I tried to find the spdif output port addresses by changing the register >> addresses of EXTOUT_TOSLINK_L/R in emu10k1.h to all 16 possible output >> address pairs between (00 - 1f). To do this, I removed the extout_mask >> check in emufx.c in the piece of code given below. I found the addresses of >> the four spdif output ports of the SBLive! card (I did/could not check this >> for the Audigity) and they are as follows: spdifo#0 = (0x02,0x03), which is >> the standard output, spdifo#1 = (0x04,0x05), spdifo#2 = (0x06,0x07) and >> spdifo#3 = (0x08,0x09). >> >> So in principle it seems to be possible to create 8 digital output channels >> on the SBLive!, however at the cost of some of its standard >> functionalities, namely the outputs of the center_lfe, headphone and rear >> channels to the LiveDrive (I think?). > >it's interesting. >are signals sent to all spdif outs without changing any other reigisters? In this experiment, I just changed the address of EXTOUT_TOSLINK_L/R in emu10k1.h. When using <aplay -D spdif "test.wav"> the signal is routed to the respective SPDIF output ports coreesponding to the chosen EXTOUT_TOSLINK_L/R adresses as mentioned above. >> >> Now, I would like to implement three additional spdif outputs in the same >> way as the standard output, so without volume or tone control. I think, >> this is an interesting extension of the functionality of the SBLive, since >> by creating 8 independent digital outputs we get a functionality on a cheap >> soundcard which is now only available at expensive (professional) soundcards. >> The problem is that I am not a programmer, however, I would like to give it >> a try where any help from the ALSA community is very much appreciated. I >> have the following questions: >> >> 1. Is the code related to the standard spdif output in emufx.c, limited to >> the following code lines or is there other code involved? >> if (emu->fx8010.extout_mask & >> ((1<<EXTOUT_TOSLINK_L)|(1<<EXTOUT_TOSLINK_R))) { >> /* IEC958 Optical Raw Playback Switch */ >> >> for (z = 0; z < 2; z++) { >> SWITCH(icode, &ptr, tmp + 0, 8 + z, gpr + z); >> SWITCH_NEG(icode, &ptr, tmp + 1, gpr + z); >> SWITCH(icode, &ptr, tmp + 1, playback + >SND_EMU10K1_PLAYBACK_CHANNELS + >> z, tmp + 1); >> OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_TOSLINK_L + z), GPR(tmp + >0), >> GPR(tmp + 1), C_00000000); >> } >> snd_emu10k1_init_stereo_onoff_control(controls + i++, "IEC958 Optical >Raw >> Playback Switch", gpr, 0); >> gpr += 2; >> } > >the code above implements a switch for "raw" playback (e.g. ac3). >at the first step, you can skip this switch and route wet signals like >others. OK, in a following experiment I will try to route the "Process FX Buses" directly to the SPDIF outputs using: OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_X_L + z), GPR(FX_Bus_Y +z), C_00000000, C_00000000); and neglect the current routings. >> >> 3. Do I need to implement additional "Process FX Buses" (now there are 9 >> buses, indicated as GPR(0) - GPR(9), where GPR(8) and GPR(9) have the >> comment S/PDIF left/right)? > >we might need more two FX buses for all 4 separate outputs (see below >my comments). >GPR(8) and (9) are used for raw playback, so additionally we need more >if 4 raw playbacks are needed, too. > >the necessary changes would be to add controls to change other SPCS >registers via mixer (and more "raw playback" switches if necessary). > >basically, the routing can be controlled via a mixer control element. >that is, to which FX bus and how much the signal is sent. >on the current code, you cannot separate spdif #1 and #2, since both >use the same center/lfe source. thus, we can define new FX channels >for them and mix if neceessary. I added SPCS3 on address 0x57, and increased the spdif_bits array form 3 to 4 locations in emu10k1.h. Further, SPCS3 was initialized in emu10k1_main.c. Is this sufficient to make it active and remove the sharing of SPCS2 for SPDIF2&3? >even with the current code, you can change the routing like the >following: > >SPDIF #0 > normal spdif playback > % aplay -Dspdif ... > >SPDIF #1 > (adjust Wave Center Playback Volume > Wave LFE Playback Volume) > % aplay -Dcenter_lfe ... > >SPDIF #2 > (toggle Headphone Center Playback Switch,1 > and Headphone LFE Playback Switch,1 > adjust Headphone Playback Volume,1 > in addition to the volumes for spdif#2) > % aplay -Dcenter_lfe ... > >SPDIF #3 > (adjust Wave Surround Playback Volume) > % aplay -Drear ... > Ok, my preference is to have a direct rout towards the SPDIF outputs without amplitude or tone control. A switch to choose between either the original application with the LiveDrive and its routings/controls or four SPDIF outputs with or without further controls could be a solution. Thanks, Gerard ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ Alsa-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/alsa-devel