本文整理汇总了C++中snd_pcm_hw_params_get_period_size函数的典型用法代码示例。如果您正苦于以下问题:C++ snd_pcm_hw_params_get_period_size函数的具体用法?C++ snd_pcm_hw_params_get_period_size怎么用?C++ snd_pcm_hw_params_get_period_size使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了snd_pcm_hw_params_get_period_size函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: BH_TRACE_INIT
void SoundPlayer::main()
{
BH_TRACE_INIT("SoundPlayer");
unsigned i;
for(i = 0; i < retries; ++i)
{
if(snd_pcm_open(&handle, "hw:0", SND_PCM_STREAM_PLAYBACK, 0) >= 0)
break;
Thread::sleep(retryDelay);
}
ASSERT(i < retries);
snd_pcm_hw_params_t* params;
VERIFY(!snd_pcm_hw_params_malloc(¶ms));
VERIFY(!snd_pcm_hw_params_any(handle, params));
VERIFY(!snd_pcm_hw_params_set_access(handle, params, SND_PCM_ACCESS_RW_INTERLEAVED));
VERIFY(!snd_pcm_hw_params_set_format(handle, params, SND_PCM_FORMAT_S16_LE));
VERIFY(!snd_pcm_hw_params_set_rate_near(handle, params, &sampleRate, 0));;
VERIFY(!snd_pcm_hw_params_set_channels(handle, params, 2));
VERIFY(!snd_pcm_hw_params(handle, params));
VERIFY(!snd_pcm_hw_params_get_period_size(params, &periodSize, 0));
snd_pcm_hw_params_free(params);
while(isRunning() && !closing)
{
flush();
VERIFY(sem.wait());
}
VERIFY(!snd_pcm_close(handle));
}
开发者ID:weilandetian,项目名称:Yoyo,代码行数:29,代码来源:SoundPlayer.cpp
示例2: alsa_log
static void alsa_log(snd_pcm_hw_params_t* hw_params, snd_pcm_sw_params_t* sw_params)
{
unsigned period_time;
snd_pcm_uframes_t period_size;
unsigned period_count;
unsigned buffer_time;
snd_pcm_uframes_t buffer_size;
unsigned tick_time;
snd_pcm_uframes_t xfer_align;
snd_pcm_hw_params_get_period_time(hw_params, &period_time, 0);
snd_pcm_hw_params_get_period_size(hw_params, &period_size, 0);
snd_pcm_hw_params_get_periods(hw_params, &period_count, 0);
snd_pcm_hw_params_get_buffer_time(hw_params, &buffer_time, 0);
snd_pcm_hw_params_get_buffer_size(hw_params, &buffer_size);
snd_pcm_hw_params_get_tick_time(hw_params, &tick_time, 0);
log_std(("sound:alsa: hw period_time %g [us], period_size %d, periods %d, buffer_time %g [us], buffer_size %d, tick_time %g [us]\n",
(double)(period_time / 1000000.0), (unsigned)period_size, (unsigned)period_count, (double)(buffer_time / 1000000.0), (unsigned)buffer_size, (double)(tick_time / 1000000.0)
));
snd_pcm_sw_params_get_xfer_align(sw_params, &xfer_align);
log_std(("sound:alsa: sw xfer_align %d\n",
(unsigned)xfer_align
));
}
开发者ID:BirchJD,项目名称:advancemame-0.106.1-RPi,代码行数:27,代码来源:salsa.c
示例3: audio_init
void audio_init(void)
{
int ret, dir;
unsigned int rate;
snd_pcm_hw_params_t * params;
rate = 44100;
frames = 32;
ret = snd_pcm_open(&handle, "default", SND_PCM_STREAM_PLAYBACK, 0);
if (ret < 0)
{
fprintf(stderr, "Unable to open pcm device: %s\n", snd_strerror(ret));
exit(EXIT_FAILURE);
}
snd_pcm_hw_params_alloca(¶ms);
snd_pcm_hw_params_any(handle, params);
snd_pcm_hw_params_set_access(handle, params,
SND_PCM_ACCESS_RW_INTERLEAVED);
snd_pcm_hw_params_set_format(handle, params, SND_PCM_FORMAT_S16_LE);
snd_pcm_hw_params_set_channels(handle, params, 2);
snd_pcm_hw_params_set_rate_near(handle, params, &rate, &dir);
snd_pcm_hw_params_set_period_size_near(handle, params, &frames, &dir);
ret = snd_pcm_hw_params(handle, params);
if (ret < 0)
{
fprintf(stderr, "unable to set hw parameters: %s\n", snd_strerror(ret));
exit(EXIT_FAILURE);
}
snd_pcm_hw_params_get_period_size(params, &frames, &dir);
}
开发者ID:alyx,项目名称:metrodwarf,代码行数:35,代码来源:alsa.c
示例4: wodPlayer_NotifyCompletions
/**************************************************************************
* wodPlayer_NotifyCompletions [internal]
*
* Notifies and remove from queue all wavehdrs which have been played to
* the speaker (ie. they have cleared the ALSA buffer). If force is true,
* we notify all wavehdrs and remove them all from the queue even if they
* are unplayed or part of a loop.
*/
static DWORD wodPlayer_NotifyCompletions(WINE_WAVEDEV* wwo, BOOL force)
{
LPWAVEHDR lpWaveHdr;
/* Start from lpQueuePtr and keep notifying until:
* - we hit an unwritten wavehdr
* - we hit the beginning of a running loop
* - we hit a wavehdr which hasn't finished playing
*/
for (;;)
{
lpWaveHdr = wwo->lpQueuePtr;
if (!lpWaveHdr) {TRACE("Empty queue\n"); break;}
if (!force)
{
snd_pcm_uframes_t frames;
snd_pcm_hw_params_get_period_size(wwo->hw_params, &frames, NULL);
if (lpWaveHdr == wwo->lpPlayPtr) {TRACE("play %p\n", lpWaveHdr); break;}
if (lpWaveHdr == wwo->lpLoopPtr) {TRACE("loop %p\n", lpWaveHdr); break;}
if (lpWaveHdr->reserved > wwo->dwPlayedTotal + frames) {TRACE("still playing %p (%lu/%u)\n", lpWaveHdr, lpWaveHdr->reserved, wwo->dwPlayedTotal);break;}
}
wwo->dwPlayedTotal += lpWaveHdr->reserved - wwo->dwPlayedTotal;
wwo->lpQueuePtr = lpWaveHdr->lpNext;
lpWaveHdr->dwFlags &= ~WHDR_INQUEUE;
lpWaveHdr->dwFlags |= WHDR_DONE;
wodNotifyClient(wwo, WOM_DONE, (DWORD_PTR)lpWaveHdr, 0);
}
return (lpWaveHdr && lpWaveHdr != wwo->lpPlayPtr && lpWaveHdr != wwo->lpLoopPtr) ?
wodPlayer_NotifyWait(wwo, lpWaveHdr) : INFINITE;
}
开发者ID:mikekap,项目名称:wine,代码行数:41,代码来源:waveout.c
示例5: initsound
void initsound(int samplerate, int channels)
{
int dir, pcmrc;
/* Open the PCM device in playback mode */
snd_pcm_open(&pcm_handle, PCM_DEVICE, SND_PCM_STREAM_PLAYBACK, 0);
/* Allocate parameters object and fill it with default values*/
snd_pcm_hw_params_alloca(¶ms);
snd_pcm_hw_params_any(pcm_handle, params);
/* Set parameters */
snd_pcm_hw_params_set_access(pcm_handle, params, SND_PCM_ACCESS_RW_INTERLEAVED);
snd_pcm_hw_params_set_format(pcm_handle, params, SND_PCM_FORMAT_S16_LE);
snd_pcm_hw_params_set_channels(pcm_handle, params, channels);
snd_pcm_hw_params_set_rate(pcm_handle, params, samplerate, 0);
/* Write parameters */
snd_pcm_hw_params(pcm_handle, params);
/* Allocate buffer to hold single period */
snd_pcm_hw_params_get_period_size(params, &frames, &dir);
buf = malloc(frames * channels * 2 * BUFFER_NUM);
}
开发者ID:leonier,项目名称:wavtest,代码行数:28,代码来源:dmplay_alsa.c
示例6: snd_pcm_hw_params_get_period_size
/**
* This method will determine, based upon the size of each frame and the number of frames between interrupts the required size of the buffer that is to store the data.
* @return
*/
int AudioInterface::getRequiredBufferSize() {
int dir;
int size;
snd_pcm_hw_params_get_period_size(params, &frames, &dir);
size = frames * this->channels * 2; /* 2 bytes/sample */
std::cout << "Get re: " << channels << ":" << frames << std::endl;
return size;
}
开发者ID:DylanWalseth,项目名称:RTSLab8,代码行数:12,代码来源:AudioInterface.cpp
示例7: snd_pcm_open
bool SoundProcessor::SetUpRecorder(){
rc_m = snd_pcm_open(&handle_m, "default",
SND_PCM_STREAM_CAPTURE, 0);
if (rc_m < 0) {
fprintf(stderr,
"unable to open pcm device: %s\n",
snd_strerror(rc_m));
exit(1);
}
/* Allocate a hardware parameters object. */
snd_pcm_hw_params_alloca(¶ms_m);
/* Fill it in with default values. */
snd_pcm_hw_params_any(handle_m, params_m);
/* Set the desired hardware parameters. */
/* Interleaved mode */
snd_pcm_hw_params_set_access(handle_m, params_m,
SND_PCM_ACCESS_RW_INTERLEAVED);
/* Signed 16-bit little-endian format */
snd_pcm_hw_params_set_format(handle_m, params_m,
SND_PCM_FORMAT_U8);
/* Two channels (stereo) */
snd_pcm_hw_params_set_channels(handle_m, params_m, 1);
/* 44100 bits/second sampling rate (CD quality) */
val_m = 8000;
snd_pcm_hw_params_set_rate_near(handle_m, params_m,
&val_m, &dir_m);
/* Set period size to 32 frames. */
//frames = 32;
snd_pcm_hw_params_set_period_size_near(handle_m,
params_m, &frames, &dir_m);
/* Write the parameters to the driver */
rc_m = snd_pcm_hw_params(handle_m, params_m);
if (rc_m < 0) {
fprintf(stderr,
"unable to set hw parameters: %s\n",
snd_strerror(rc_m));
exit(1);
}
/* Use a buffer large enough to hold one period */
snd_pcm_hw_params_get_period_size(params_m,
&frames, &dir_m);
size = frames; /* 2 bytes/sample, 2 channels */
buffer_m = (char *) malloc(size);
/* We want to loop for 5 seconds */
snd_pcm_hw_params_get_period_time(params_m,
&val_m, &dir_m);
return true;
}
开发者ID:jolygit,项目名称:code,代码行数:58,代码来源:soundProcessor.cpp
示例8: snd_pcm_open
void Recorder::initRecoder()
{
int rc;
snd_pcm_hw_params_t *params;
unsigned int val;
int dir=0;
/* Open PCM device for recording (capture). */
rc = snd_pcm_open(&handle, "default",SND_PCM_STREAM_CAPTURE, 0);
if (rc < 0) {
fprintf(stderr,"unable to open pcm device: %s\n",snd_strerror(rc));
exit(1);
}
/* Allocate a hardware parameters object. */
snd_pcm_hw_params_alloca(¶ms);
/* Fill it in with default values. */
snd_pcm_hw_params_any(handle, params);
/* Set the desired hardware parameters. */
/* Interleaved mode */
snd_pcm_hw_params_set_access(handle, params,
SND_PCM_ACCESS_RW_INTERLEAVED);
/* Signed 16-bit little-endian format */
snd_pcm_hw_params_set_format(handle, params,SND_PCM_FORMAT_S16_LE);
/* Two channels (stereo) */
snd_pcm_hw_params_set_channels(handle, params, CHANNELS);
/* 44100 bits/second sampling rate (CD quality) */
val = SAMPLERATE;
snd_pcm_hw_params_set_rate_near(handle, params,
&val, &dir);
/* Set period size to 32 frames. */
frames = 32;
snd_pcm_hw_params_set_period_size_near(handle,
params, &frames, &dir);
/* Write the parameters to the driver */
rc = snd_pcm_hw_params(handle, params);
if (rc < 0)
{
fprintf(stderr,"unable to set hw parameters: %s\n",snd_strerror(rc));
exit(1);
}
/* Use a buffer large enough to hold one period */
snd_pcm_hw_params_get_period_size(params,&frames, &dir);
size = frames * 2; /* 2 bytes/sample, 2 channels */
/* We want to loop for 5 seconds */
snd_pcm_hw_params_get_period_time(params,&val, &dir);
//loops = 5000000 / val; //获取5秒中所对应的loop这里用不到
}
开发者ID:asdfjkl697,项目名称:projects,代码行数:58,代码来源:recorder.cpp
示例9: set_hwparams
static
int set_hwparams(snd_pcm_t *handle,
snd_pcm_hw_params_t *params,
snd_pcm_access_t access)
{
int err, dir;
/* choose all parameters */
err = snd_pcm_hw_params_any(handle,params);
if (err < 0) {
printf("Access type not available for playback: %s\n", snd_strerror(err));
return err;
}
/* set the sample format */
err = snd_pcm_hw_params_set_format(handle, params, alsa_format);
if (err < 0) {
printf("Sample format not available for playback: %s\n", snd_strerror(err));
return err;
}
/* set the count of channels */
err = snd_pcm_hw_params_set_channels(handle, params, channels);
if (err < 0) {
printf("Channels count (%i) not available for playbacks: %s\n", channels, snd_strerror(err));
return err;
}
/* set the stream rate */
err = snd_pcm_hw_params_set_rate_near(handle, params, rate, 0);
if (err < 0) {
printf("Rate %iHz not available for playback: %s\n", rate, snd_strerror(err));
return err;
}
if (err != rate) {
printf("Rate doesn't match (requested %iHz, get %iHz)\n", rate, err);
return -EINVAL;
}
/* set buffer time */
err = snd_pcm_hw_params_set_buffer_time_near(handle, params, buffer_time, &dir);
if (err < 0) {
printf("Unable to set buffer time %i for playback: %s\n", buffer_time, snd_strerror(err));
return err;
}
buffer_size = snd_pcm_hw_params_get_buffer_size(params);
/* set period time */
err = snd_pcm_hw_params_set_period_time_near(handle, params, period_time, &dir);
if (err < 0) {
printf("Unable to set period time %i for playback: %s\n", period_time, snd_strerror(err));
return err;
}
period_size = snd_pcm_hw_params_get_period_size(params, &dir);
/* write the parameters to device */
err = snd_pcm_hw_params(handle, params);
if (err < 0) {
printf("Unable to set hw params for playback: %s\n", snd_strerror(err));
return err;
}
return 0;
}
开发者ID:Jay-Jay-OPL,项目名称:ps2sdk-ports,代码行数:57,代码来源:audio_alsa.c
示例10: audio_capture_init
int audio_capture_init(char *audio_dev)
{
unsigned int val;
int dir, rc, size;
/* Open PCM device for recording (capture). */
rc = snd_pcm_open(&handle, "default", SND_PCM_STREAM_CAPTURE, 0);
if (rc < 0) {
fprintf(stderr, "unable to open pcm device: %s\n", snd_strerror(rc));
return -1;
}
/* Allocate a hardware parameters object. */
snd_pcm_hw_params_alloca(&hw_params);
/* Fill it in with default values. */
snd_pcm_hw_params_any(handle, hw_params);
/* Set the desired hardware parameters. */
/* Interleaved mode */
snd_pcm_hw_params_set_access(handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED);
/* Signed 16-bit little-endian format */
snd_pcm_hw_params_set_format(handle, hw_params, SND_PCM_FORMAT_S16_LE);
/* 1 channel mono */
snd_pcm_hw_params_set_channels(handle, hw_params, 1);
/* 44100 bits/second sampling rate (CD quality) */
val = 44100;
snd_pcm_hw_params_set_rate_near(handle, hw_params, &val, &dir);
/* Set period size to 32 frames. */
frames = 32;
snd_pcm_hw_params_set_period_size_near(handle, hw_params, &frames, &dir);
/* Write the parameters to the driver */
rc = snd_pcm_hw_params(handle, hw_params);
if (rc < 0) {
fprintf(stderr, "unable to set hw parameters: %s\n", snd_strerror(rc));
return -1;
}
/* Use a buffer large enough to hold one period */
snd_pcm_hw_params_get_period_size(hw_params, &frames, &dir);
size = frames * 4; /* 2 bytes/sample, 2 channels */
frame_buffer = (char *) malloc(size);
printf("- Allocated %d bytes frame buffer\n", size);
snd_pcm_hw_params_get_period_time(hw_params, &val, &dir);
return 0;
}
开发者ID:tiberig,项目名称:aprsdump,代码行数:54,代码来源:audio_capture.c
示例11: set_params
static void set_params(void)
{
hwparams.format=SND_PCM_FORMAT_S16_LE;
hwparams.channels=2;
hwparams.rate=44100;
snd_pcm_hw_params_t *params;
snd_pcm_sw_params_t *swparams;
snd_pcm_hw_params_alloca(¶ms);
snd_pcm_sw_params_alloca(&swparams);
snd_pcm_hw_params_any(handle, params);
snd_pcm_hw_params_set_format(handle, params, hwparams.format);
snd_pcm_hw_params_set_channels(handle, params, hwparams.channels);
snd_pcm_hw_params_set_rate_near(handle, params, &hwparams.rate, 0);
buffer_time=0;
snd_pcm_hw_params_get_buffer_time_max(params,&buffer_time, 0);
period_time=125000;
snd_pcm_hw_params_set_period_time_near(handle, params,&period_time, 0);
buffer_time = 500000;
snd_pcm_hw_params_set_buffer_time_near(handle, params, &buffer_time, 0);
/*monotonic = */snd_pcm_hw_params_is_monotonic(params);
/*can_pause = */snd_pcm_hw_params_can_pause(params);
printf("sizeof(params) : %d\n",sizeof(params));
snd_pcm_hw_params(handle, params);
snd_pcm_uframes_t buffer_size;
snd_pcm_hw_params_get_period_size(params, &chunk_size, 0);
size_t n=chunk_size;
snd_pcm_sw_params_set_avail_min(handle, swparams, n);
snd_pcm_uframes_t start_threshold, stop_threshold;
start_threshold=22050;
snd_pcm_sw_params_set_start_threshold(handle, swparams, start_threshold);
stop_threshold=22050;
snd_pcm_sw_params_set_stop_threshold(handle, swparams, stop_threshold);
snd_pcm_format_physical_width(hwparams.format);
}
开发者ID:cty222,项目名称:Note,代码行数:51,代码来源:newPlayer1.c
示例12: init_alsa_play
/****************************************************************************************
* 函数名: init_alsa_play
* 输 入: 无
* 输 出: 无
* 功能说明:alsa音频播放器初始化
*
*
******************************************************************************************/
void init_alsa_play()
{
snd_pcm_hw_params_t *params;
unsigned int val;
int dir;
/* Open PCM device for playback. */
rc=snd_pcm_open(&handle,"plughw:0,0", SND_PCM_STREAM_PLAYBACK, 0);
if (rc< 0)
{
fprintf(stderr, "unable to open pcm device: %s\n", snd_strerror(rc));
exit(1);
}
/* Allocate a hardware parameters object. */
snd_pcm_hw_params_alloca(¶ms);
/* Fill it in with default values. */
snd_pcm_hw_params_any(handle, params);
/* Set the desired hardware parameters. */
/* Interleaved mode */
snd_pcm_hw_params_set_access(handle,params, SND_PCM_ACCESS_RW_INTERLEAVED);
/* Signed 16-bit little-endian format 格式*/
snd_pcm_hw_params_set_format(handle,params, SND_PCM_FORMAT_S16_LE);
/* Two channels (stereo) 声道*/
snd_pcm_hw_params_set_channels(handle, params, channels);
/* 32000 bits/second sampling rate (CD quality) 采样率设置*/
snd_pcm_hw_params_set_rate_near(handle,params, &rate, &dir); /* Set period size to 32 frames. */
frames = SAMPLERATE/1000*READMSFORONCE;
snd_pcm_hw_params_set_period_size_near(handle, params, &frames, &dir);
/* Write the parameters to the driver */
rc = snd_pcm_hw_params(handle, params);
if (rc < 0)
{
fprintf(stderr, "unable to set hw parameters: %s\n", snd_strerror(rc));
exit(1);
}
/*Use a buffer large enough to hold one period*/
snd_pcm_hw_params_get_period_size(params, &frames, &dir); //32个采样点算一帧
size = frames * (channels);
/* 2 bytes/sample, 2 channels */
buffer = (char *) malloc(size);
/* We want to loop for 5 seconds */
snd_pcm_hw_params_get_period_time(params, &val, &dir);
}
开发者ID:naeems,项目名称:bkvoice,代码行数:57,代码来源:simple_speex_dec.c
示例13: carmen_sound_set_device_parameters
void
carmen_sound_set_device_parameters(snd_pcm_t *handle, int sampling_rate, int num_frames)
{
int rc, dir;
unsigned int val;
snd_pcm_hw_params_t *params;
snd_pcm_uframes_t frames;
val = sampling_rate;
frames = (snd_pcm_uframes_t) num_frames;
/* Allocate a hardware parameters object. */
snd_pcm_hw_params_alloca(¶ms);
/* Fill it in with default values. */
snd_pcm_hw_params_any(handle, params);
/* Interleaved mode */
snd_pcm_hw_params_set_access(handle, params, SND_PCM_ACCESS_RW_INTERLEAVED);
/* Signed 16-bit little-endian format */
snd_pcm_hw_params_set_format(handle, params, SND_PCM_FORMAT_S16_LE);
/* Two channels (stereo) */
snd_pcm_hw_params_set_channels(handle, params, 2);
/* set bits/second sampling rate */
snd_pcm_hw_params_set_rate_near(handle, params, &val, &dir);
/* Set period size to num of frames. */
snd_pcm_hw_params_set_period_size_near(handle, params, &frames, &dir);
/* Write the parameters to the driver */
rc = snd_pcm_hw_params(handle, params);
if (rc < 0)
exit(printf("unable to set hw parameters: %s\n", snd_strerror(rc)));
/* Use a buffer large enough to hold one period */
snd_pcm_hw_params_get_period_size(params, &frames, &dir);
/* We want to loop for 5 seconds */
snd_pcm_hw_params_get_period_time(params, &val, &dir);
// @TODO: pesquisar por que tem que ler um pouco que vem vazio nao sei por que...
char buffer[4 * 32];
rc = snd_pcm_readi(handle, buffer, 32);
}
开发者ID:ulyssesrr,项目名称:carmen_lcad,代码行数:48,代码来源:sound.c
示例14: snd_pcm_open
void AudioWalkera::setupAlsa(){
int dir;
int t = 0, i, c;
rc = snd_pcm_open(&handle, "default", SND_PCM_STREAM_CAPTURE, 0);
if(rc < 0)
exitError("Could not open pcm device");
snd_pcm_hw_params_alloca(¶ms);
//rc = setupHardware(handle, params, &dir);
snd_pcm_uframes_t frames_inner;
unsigned int val;
snd_pcm_hw_params_any(handle, params);
snd_pcm_hw_params_set_access(handle, params,
SND_PCM_ACCESS_RW_INTERLEAVED);
snd_pcm_hw_params_set_format(handle, params, SND_PCM_FORMAT_S16_LE);
snd_pcm_hw_params_set_channels(handle, params, 1);
val = 48000;
snd_pcm_hw_params_set_rate_near(handle, params, &val, &dir);
frames_inner = 2304;
snd_pcm_hw_params_set_period_size_near(handle, params, &frames_inner, &dir);
rc = snd_pcm_hw_params(handle, params);
if(rc < 0)
exitError("Could not set hardware parameters");
snd_pcm_hw_params_get_period_size(params, &frames, &dir);
buffer = (short*) calloc(frames, sizeof(short));
}
开发者ID:hitcher404,项目名称:AudioWalkera,代码行数:46,代码来源:audiowalkera.cpp
示例15: alsa_set_hwparams
static int alsa_set_hwparams()
{
snd_pcm_hw_params_t *hwp;
snd_pcm_sw_params_t *swp;
int dir = 1;
unsigned period_time;
snd_pcm_uframes_t buffer_size, period_size;
snd_pcm_hw_params_alloca(&hwp);
snd_pcm_sw_params_alloca(&swp);
// ALSA bug? If we request 44100 Hz, it rounds the value up to 48000...
alsa_hw.rate--;
if (alsa_error("hw_params_any", snd_pcm_hw_params_any(alsa_hw.handle, hwp))
|| alsa_error("hw_params_set_format", snd_pcm_hw_params_set_format(alsa_hw.handle, hwp, alsa_hw.format))
|| alsa_error("hw_params_set_channels",
snd_pcm_hw_params_set_channels(alsa_hw.handle, hwp, alsa_hw.num_channels))
|| alsa_error("hw_params_set_rate_near",
snd_pcm_hw_params_set_rate_near(alsa_hw.handle, hwp, &alsa_hw.rate, &dir))
|| alsa_error("hw_params_set_access",
snd_pcm_hw_params_set_access(alsa_hw.handle, hwp, SND_PCM_ACCESS_RW_INTERLEAVED))
|| alsa_error("hw_params_set_buffer_time_near",
snd_pcm_hw_params_set_buffer_time_near(alsa_hw.handle, hwp, &alsa_hw.buffer_time, 0)))
return -1;
/* How often to call our SIGIO handler (~40Hz) */
period_time = alsa_hw.buffer_time / 4;
if (alsa_error
("hw_params_set_period_time_near",
snd_pcm_hw_params_set_period_time_near(alsa_hw.handle, hwp, &period_time, &dir))
|| alsa_error("hw_params_get_buffer_size", snd_pcm_hw_params_get_buffer_size(hwp, &buffer_size))
|| alsa_error("hw_params_get_period_size", snd_pcm_hw_params_get_period_size(hwp, &period_size, 0))
|| alsa_error("hw_params", snd_pcm_hw_params(alsa_hw.handle, hwp)))
return -1;
snd_pcm_sw_params_current(alsa_hw.handle, swp);
if (alsa_error
("sw_params_set_start_threshold", snd_pcm_sw_params_set_start_threshold(alsa_hw.handle, swp, period_size))
|| alsa_error("sw_params_set_avail_min", snd_pcm_sw_params_set_avail_min(alsa_hw.handle, swp, period_size))
|| alsa_error("sw_params", snd_pcm_sw_params(alsa_hw.handle, swp)))
return -1;
return 0;
}
开发者ID:TryndamereStark,项目名称:lirc,代码行数:45,代码来源:hw_audio_alsa.c
示例16: sound_init
int
sound_init ()
{
int rc;
rc = snd_pcm_open (&handle, "default", SND_PCM_STREAM_PLAYBACK, 0);
if (rc < 0)
{
fprintf (stderr, "unable to open pcm device: %s\n", snd_strerror (rc));
return rc;
}
g_paused = 0;
snd_pcm_hw_params_alloca (¶ms);
snd_pcm_hw_params_any (handle, params);
snd_pcm_hw_params_set_access (handle, params,
SND_PCM_ACCESS_RW_INTERLEAVED);
snd_pcm_hw_params_set_format (handle, params, SND_PCM_FORMAT_S16_LE);
snd_pcm_hw_params_set_channels (handle, params, CHANNELS);
val = RATE;
snd_pcm_hw_params_set_rate_near (handle, params, &val, &dir);
frames = FRAMES;
snd_pcm_hw_params_set_period_size_near (handle, params, &frames, &dir);
rc = snd_pcm_hw_params (handle, params);
if (rc < 0)
return rc;
snd_pcm_hw_params_get_period_size (params, &frames, &dir);
snd_pcm_hw_params_get_period_time (params, &val, &dir);
return 0;
}
开发者ID:giuseppe,项目名称:shpotify,代码行数:41,代码来源:alsa.c
示例17: SoundOutput_Impl
SoundOutput_alsa::SoundOutput_alsa(int mixing_frequency, int mixing_latency) :
SoundOutput_Impl(mixing_frequency, mixing_latency), frames_in_buffer(4096),
frames_in_period(1024)
{
int rc;
snd_pcm_hw_params_t *hwparams;
rc = snd_pcm_open(&handle, "default", SND_PCM_STREAM_PLAYBACK, 0);
if (rc < 0)
{
log_event("warn", "ClanSound: Couldn't open sound device, disabling sound");
handle = nullptr;
return;
}
snd_pcm_hw_params_alloca(&hwparams);
snd_pcm_hw_params_any(handle, hwparams);
snd_pcm_hw_params_set_access(handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED);
snd_pcm_hw_params_set_format(handle, hwparams, SND_PCM_FORMAT_FLOAT);
snd_pcm_hw_params_set_channels(handle, hwparams, 2);
snd_pcm_hw_params_set_rate_near(handle, hwparams,
(unsigned int *)&this->mixing_frequency, nullptr);
snd_pcm_hw_params_set_buffer_size_near(handle, hwparams, &frames_in_buffer);
frames_in_period = frames_in_buffer / 4;
snd_pcm_hw_params_set_period_size_near(handle, hwparams, &frames_in_period, nullptr);
rc = snd_pcm_hw_params(handle, hwparams);
if (rc < 0)
{
log_event("warn", "ClanSound: Couldn't initialize sound device, disabling sound");
snd_pcm_close(handle);
handle = nullptr;
return;
}
snd_pcm_hw_params_get_period_size(hwparams, &frames_in_period, nullptr);
start_mixer_thread();
}
开发者ID:ARMCoderCHS,项目名称:ClanLib,代码行数:39,代码来源:soundoutput_alsa.cpp
示例18: sound_info_record_new
// 声卡采集初始化
struct SoundInfo* sound_info_record_new() {
struct SoundInfo *info = (struct SoundInfo*)malloc(sizeof(struct SoundInfo));
int rc;
int dir = 0;
info->channels = 2;
info->frequency = 44100;
rc = snd_pcm_open(&info->handle, "default", SND_PCM_STREAM_CAPTURE, 0);
snd_pcm_hw_params_alloca(&info->params);
rc = snd_pcm_hw_params_any(info->handle, info->params);
rc = snd_pcm_hw_params_set_access(info->handle, info->params, SND_PCM_ACCESS_RW_INTERLEAVED);
snd_pcm_hw_params_set_format(info->handle, info->params, SND_PCM_FORMAT_S16_LE);
rc = snd_pcm_hw_params_set_channels(info->handle, info->params, info->channels);
unsigned int val = info->frequency;
rc = snd_pcm_hw_params_set_rate_near(info->handle, info->params, &val, &dir);
rc = snd_pcm_hw_params(info->handle, info->params);
info->frames = 32;//"frames"=channel*size/8=4, frames = "frames"*8 one period contains 8 "frames"
snd_pcm_hw_params_set_period_size_near(info->handle, info->params, &info->frames, &dir);
rc = snd_pcm_hw_params(info->handle, info->params);
snd_pcm_hw_params_get_period_size(info->params, &info->frames, &dir);
info->bufferSize = info->frames * 4;
info->buffer = (char*) malloc(info->bufferSize);
snd_pcm_hw_params_get_period_time(info->params, &val, &dir);
memset(info->buffer, 0, info->bufferSize);
return info;
}
开发者ID:chenshuchao,项目名称:c_chat,代码行数:40,代码来源:sound.c
示例19: setparams_set
int setparams_set(snd_pcm_t *handle,
snd_pcm_hw_params_t *params,
snd_pcm_sw_params_t *swparams,
const char *id)
{
int err;
snd_pcm_uframes_t val;
err = snd_pcm_hw_params(handle, params);
if (err < 0) {
printf("Unable to set hw params for %s: %s\n", id, snd_strerror(err));
return err;
}
err = snd_pcm_sw_params_current(handle, swparams);
if (err < 0) {
printf("Unable to determine current swparams for %s: %s\n", id, snd_strerror(err));
return err;
}
err = snd_pcm_sw_params_set_start_threshold(handle, swparams, 0x7fffffff);
if (err < 0) {
printf("Unable to set start threshold mode for %s: %s\n", id, snd_strerror(err));
return err;
}
if (!block)
val = 4;
else
snd_pcm_hw_params_get_period_size(params, &val, NULL);
err = snd_pcm_sw_params_set_avail_min(handle, swparams, val);
if (err < 0) {
printf("Unable to set avail min for %s: %s\n", id, snd_strerror(err));
return err;
}
err = snd_pcm_sw_params(handle, swparams);
if (err < 0) {
printf("Unable to set sw params for %s: %s\n", id, snd_strerror(err));
return err;
}
return 0;
}
开发者ID:CarbonDev,项目名称:android_device_motorola_solana,代码行数:39,代码来源:latency.c
示例20: snd_send
int
snd_send(FILE * fp, size_t n)
{
snd_pcm_format_t format;
unsigned int nchannels;
snd_pcm_uframes_t period;
snd_pcm_hw_params_t *params;
snd_pcm_hw_params_alloca(¶ms);
snd_pcm_hw_params_current(pcm, params);
snd_pcm_hw_params_get_format(params, &format);
snd_pcm_hw_params_get_channels(params, &nchannels);
snd_pcm_hw_params_get_period_size(params, &period, 0);
int framesize =
snd_pcm_format_width(format) / 8 * nchannels;
unsigned char buf[period * framesize * 128];
size_t l;
while (n > sizeof(buf)) {
if ((l = fread(buf, 1, sizeof(buf), fp))) {
switch (snd_pcm_writei(pcm, buf, l / framesize)) {
case -EBADF:
return -1;
case -EPIPE:
#ifndef NDEBUG
snd_pcm_recover(pcm, -EPIPE, 0);
#else
snd_pcm_prepare(pcm);
#endif
}
} else
goto EOS;
n -= l;
}
if ((l = fread(buf, 1, n, fp)))
snd_pcm_writei(pcm, buf, l / framesize);
if (l < n)
EOS:if (ftell(fp) > 0)
eputs("Unexpected end of stream");
return snd_pcm_drain(pcm);
}
开发者ID:eataix,项目名称:audioedit,代码行数:39,代码来源:wavplay.c
注:本文中的snd_pcm_hw_params_get_period_size函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论