-// err_msg="audio flush";
-// if ((rc=snd_pcm_channel_flush(pcm_handle, SND_PCM_CHANNEL_PLAYBACK))<0)
-// goto error;
- err_msg="audio munmap";
- if ((rc=snd_pcm_munmap(pcm_handle, SND_PCM_CHANNEL_PLAYBACK))<0)
- goto error;
-
- memset(¶ms, 0, sizeof(params));
- params.channel = SND_PCM_CHANNEL_PLAYBACK;
- params.mode = SND_PCM_MODE_BLOCK;
- params.format.interleave=1;
- params.format.format=format;
- params.format.rate=rate;
- params.format.voices=stereo+1;
- params.start_mode = SND_PCM_START_GO;
- params.stop_mode = SND_PCM_STOP_ROLLOVER;
- params.buf.block.frag_size=frag_size;
- params.buf.block.frags_min=1;
- params.buf.block.frags_max=-1;
-// err_msg="audio flush";
-// if ((rc=snd_pcm_channel_flush(pcm_handle, SND_PCM_CHANNEL_PLAYBACK))<0)
-// goto error;
- err_msg="audio params";
- if ((rc=snd_pcm_channel_params(pcm_handle, ¶ms))<0)
- goto error;
-
- err_msg="audio mmap";
- if ((rc=snd_pcm_mmap(pcm_handle, SND_PCM_CHANNEL_PLAYBACK, &mmap_control, (void **)&mmap_data))<0)
- goto error;
- err_msg="audio prepare";
- if ((rc=snd_pcm_plugin_prepare(pcm_handle, SND_PCM_CHANNEL_PLAYBACK))<0)
- goto error;
-
- memset(&setup, 0, sizeof(setup));
- setup.mode = SND_PCM_MODE_BLOCK;
- setup.channel = SND_PCM_CHANNEL_PLAYBACK;
- err_msg="audio setup";
- if ((rc=snd_pcm_channel_setup(pcm_handle, &setup))<0)
- goto error;
-
- shm=&sn;
- memset((dma_t*)shm,0,sizeof(*shm));
- shm->splitbuffer = 0;
- shm->channels=setup.format.voices;
- shm->submission_chunk=128; // don't mix less than this #
- shm->samplepos=0; // in mono samples
- shm->samplebits=setup.format.format==SND_PCM_SFMT_S16_LE?16:8;
- shm->samples=setup.buf.block.frags*setup.buf.block.frag_size/(shm->samplebits/8); // mono samples in buffer
- shm->speed=setup.format.rate;
- shm->buffer=(unsigned char*)mmap_data;
- Con_Printf("%5d stereo\n", shm->channels - 1);
- Con_Printf("%5d samples\n", shm->samples);
- Con_Printf("%5d samplepos\n", shm->samplepos);
- Con_Printf("%5d samplebits\n", shm->samplebits);
- Con_Printf("%5d submission_chunk\n", shm->submission_chunk);
- Con_Printf("%5d speed\n", shm->speed);
- Con_Printf("0x%x dma buffer\n", (int)shm->buffer);
- Con_Printf("%5d total_channels\n", total_channels);
-
- snd_inited=1;
- return 1;
- error:
- Con_Printf("Error: %s: %s\n", err_msg, snd_strerror(rc));
- error_2: