Skip to contentSkip to conversation

Hi, does someone use i810 onboard sound ?

DISCUSSION Stas Sergeev 2 participants 2 messages Oct 4, 2003 – Oct 5, 2003

lore
Share & tools
lore
#0 lore raw

Hello.

Quoted 2 lines · Joлl Bourquard

Ok, I've played with the value of 6000 and tried various possibilities up to 120000, but the sound doesn't improve.

That's too much. 22050 is the maximum reasonable value for that, but in practice you'll in most cases need to lower the freq from 6000, not raise it.

Quoted 3 lines

There is something fishy, it seems. The sound is composed of a lot of little "clicks". When a high sampling value (~60000) is used, it sounds like the clicks become shorter.

Well, after all there might be a bug somewhere. Try the attached patch and see if it helps, then try tuning the value again.

arch/linux/dosext/sound/linux_sound.c +9 -3
@@ -261,6 +261,7 @@
   static int sound_frag = 0x0200007;
   static uint8_t buffer[BUF_LEN];
   static size_t buffer_count = 0;
+  int result;
 
   buffer[buffer_count] = value;
   if (buffer_count < BUF_LEN - 1)
@@ -274,20 +275,25 @@
     {
       S_printf ("SB:[Linux] Initialising Direct DAC write (%u bits)\n", bits);
       if (linux_sb_dma_is_empty() == DMA_HANDLER_OK) {
-        bits_per_samp = bits;
+        result = 0;
         if (ioctl (dsp_fd, SNDCTL_DSP_SAMPLESIZE, &bits)<0) {
            S_printf ("SB:[Linux] Warning: ioctl() (SAMPLESIZE) failed: %s\n", strerror(errno));
-           bits_per_samp = 0;
+           result = -1;
         }
         if (linux_set_OSS_fragsize(sound_frag) == DMA_HANDLER_NOT_OK) {
            S_printf ("SB:[Linux] Warning: failed to change sound fragment size.\n");
-           bits_per_samp = 0;
+           result = -1;
         }
         linux_sb_set_speed(DIRECT_WRITE_FREQ, 0, 0, 0);
         /* reset DMA settings */
         sample_rate = 0;
         num_channels = 0;
         oss_block_size = 0;
+        if (result == -1) {
+          bits_per_samp = 0;
+          return;
+        }
+        bits_per_samp = bits;
       }
       else {
         S_printf("SB:[Linux] Sorry, can't change OSS settings now...\n");
#1 lore raw

Hi,

Thanks for the patch and the help !

I applied it, made a 'make clean' then tried various values between [100..22050], but unfortunately I heard no improvement from the new compiles.

Here's current status for all sound programs I have:
- Gobliiins (= Goblins 1): distorted
- Ween: distorted
- Stunts: no sound in Soundblaster mode
- Inca: double-speed, perhaps distorted
- dosamp: ok in stereo

About a workaround for the stereo issue, I didn't see it as "post-processing". Perhaps a simple option to prevent opening /dev/dsp in mono could be useful for people with buggy drivers (ie: i810) ?

Best Regards,
Joël

Quoted 48 lines · Stas Sergeev

Hello.

Quoted 2 lines · Joлl Bourquard

Ok, I've played with the value of 6000 and tried various possibilities up to 120000, but the sound doesn't improve.

That's too much. 22050 is the maximum reasonable value for that, but in practice you'll in most cases need to lower the freq from 6000, not raise it.

Quoted 3 lines

There is something fishy, it seems. The sound is composed of a lot of little "clicks". When a high sampling value (~60000) is used, it sounds like the clicks become shorter.

Well, after all there might be a bug somewhere. Try the attached patch and see if it helps, then try tuning the value again.

______________________________________________________________________

arch/linux/dosext/sound/linux_sound.c +4 -3
@@ -261,6 +261,7 @@
   static int sound_frag = 0x0200007;
   static uint8_t buffer[BUF_LEN];
   static size_t buffer_count = 0;
+  int result;
 
   buffer[buffer_count] = value;
   if (buffer_count < BUF_LEN - 1)
@@ -274,20 +275,25 @@
     {
       S_printf ("SB:[Linux] Initialising Direct DAC write (%u bits)\n", bits);
       if (linux_sb_dma_is_empty() == DMA_HANDLER_OK) {
-        bits_per_samp = bits;
+        result = 0;
         if (ioctl (dsp_fd, SNDCTL_DSP_SAMPLESIZE, &bits)<0) {
            S_printf ("SB:[Linux] Warning: ioctl() (SAMPLESIZE) failed: %s\n", strerror(errno));
-           bits_per_samp = 0;
+           result = -1;
         }
         if (linux_set_OSS_fragsize(sound_frag) == DMA_HANDLER_NOT_OK) {
            S_printf ("SB:[Linux] Warning: failed to change sound fragment size.\n");
-           bits_per_samp = 0;
+           result = -1;
         }
         linux_sb_set_speed(DIRECT_WRITE_FREQ, 0, 0, 0);
         /* reset DMA settings */
         sample_rate = 0;

arch/linux/dosext/sound/linux_sound.c line 299

Quoted 10 lines
arch/linux/dosext/sound/linux_sound.c +5 -0
         num_channels = 0;
         oss_block_size = 0;
+        if (result == -1) {
+          bits_per_samp = 0;
+          return;
+        }
+        bits_per_samp = bits;
       }
       else {
         S_printf("SB:[Linux] Sorry, can't change OSS settings now...\n");

-
To unsubscribe from this list: send the line "unsubscribe linux-msdos" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html