anyone tell me why i get a seg fault?
( excuse the c++ but im learning :)
#include <iostream>
#include <alsa/asoundlib.h>
#include <sndfile.h>
using namespace std;
#define CLI_MSG_ERR "Error: "
#define CLI_MSG_INFO "*** "
#define CLI_MSG_CONT " [ cont... ] "
#define CLI_MSG_VAR "---> "
#define CLI_MSG_SEP "-------------------------------------"
char *pcm_name;
snd_pcm_t *pcm_handle;
snd_pcm_stream_t stream=SND_PCM_STREAM_PLAYBACK;
snd_pcm_hw_params_t *hwparams;
int channels= 2;
int rate= 44100;
int buffer_time= 500000;
snd_pcm_sframes_t buffer_size;
int period_time= 100000;
snd_pcm_sframes_t period_size;
int main(int argc, char *argv[])
{
pcm_name=strdup( "plughw:0,0");
snd_pcm_hw_params_alloca(&hwparams);
if (snd_pcm_open( &pcm_handle, pcm_name, stream, 0)<0)
{
cout << CLI_MSG_ERR << "failed on snd_pcm_open" << endl;
return -1;
}
else
{
cout << CLI_MSG_INFO << "snd_pcm_open ok" << endl;
}
// now for the config
cout << CLI_MSG_INFO << "going for config" << endl;;
int channels= 2;
int rate= 44100;
// SND_PCM_SFMT_S16_LE / SND_PCM_SFMT_US
//pf.channels= 2;
//pf.rate= 44100;
if (snd_pcm_hw_params_any( pcm_handle, hwparams) <0)
{
cout << CLI_MSG_ERR << "failed on snd_pcm_hw_params_any" << endl;
return -1;
}
else
{
cout << CLI_MSG_INFO << "snd_pcw_hw_params ok" << endl;
}
if (snd_pcm_hw_params_set_access( pcm_handle, hwparams,
SND_PCM_ACCESS_RW_INTERLEAVED) <0)
{
cout << CLI_MSG_ERR << "failed on snd_pcm_hw_params_set_access" << endl;
return -1;
}
else
{
cout << CLI_MSG_INFO << "snd_pcm_hw_params ok" << endl;
}
if (snd_pcm_hw_params_set_format( pcm_handle, hwparams, SND_PCM_FORMAT_S16_LE) <0)
{
cout << CLI_MSG_ERR << "failed on snd_pcm_playback format ( format not
supported? )" << endl;
return -1;
}
else
{
cout << CLI_MSG_INFO << "snd_pcm_playback_format ok" << endl;
}
int dir;
rate=snd_pcm_hw_params_set_rate_near( pcm_handle, hwparams, rate, &dir);
if (dir!=0)
{
cout << CLI_MSG_INFO << "could not use desired rate - now using " << rate << "
as rate" << endl;
}
if (snd_pcm_hw_params_set_channels( pcm_handle, hwparams, 2) <0)
{
cout << CLI_MSG_ERR << "failed on snd_pcm_hw_params_set_channels" << endl;
}
else
{
cout << CLI_MSG_INFO << "snd_pcm_hw_params_set_channels ok" << endl;
}
if ( snd_pcm_hw_params_set_buffer_time_near( pcm_handle, hwparams, buffer_time,
&buffer_time) <0)
{
cout << CLI_MSG_ERR << "failed on snd_pcm_hw_params_set_buffer_time_near" <<
CLI_MSG_CONT << endl;
cout << CLI_MSG_ERR << "could not use desired buffer time - now using " <<
buffer_time << " as buffer time" << endl;
}
else
{
cout << CLI_MSG_INFO << "snd_pcm_hw_params_set_buffer_time ok" << endl;
}
buffer_size= snd_pcm_hw_params_get_buffer_size( hwparams);
cout << CLI_MSG_VAR << "buffer_size= " << buffer_size << endl;
if ( snd_pcm_hw_params_set_period_time_near( pcm_handle, hwparams, period_time,
&dir) <0)
{
cout << CLI_MSG_ERR << "could not set desired period_time" << endl;
}
else
{
cout << CLI_MSG_INFO << "snd_pcm_hw_params_set_period_time_near ok" << endl;
}
period_size=snd_pcm_hw_params_get_period_size( hwparams, &dir);
cout << CLI_MSG_VAR << "period_size= " << period_size << endl;
if (snd_pcm_hw_params( pcm_handle, hwparams) <0)
{
cout << CLI_MSG_ERR << "failed on snd_pcm_hw_params" << endl;
}
else
{
cout << CLI_MSG_INFO << "snd_pcm_hw_params ok" << endl;
}
cout << CLI_MSG_INFO << "attempting to load..." << endl;
int s= (period_size * channels * snd_pcm_format_width(SND_PCM_FORMAT_S16_LE)) /8 ;
cout << CLI_MSG_VAR << "s=" << s << endl;
SNDFILE *in_file;
SF_INFO sf_info;
int str_buffer[s];
int readcount;
cout << CLI_MSG_VAR << "sizeof(str_buffer)= " << sizeof(str_buffer) << endl;
cout << CLI_MSG_INFO << "opening " << argv[1] << endl;
in_file= sf_open_read( argv[1], &sf_info);
/*
sf_get_header_info( in_file, str_buffer, 4096, 0);
cout << CLI_MSG_INFO << "file info: " << CLI_MSG_CONT << endl;
cout << CLI_MSG_SEP << endl;
cout << str_buffer << endl;
cout << CLI_MSG_SEP << endl;
*/
while( readcount= sf_read_int( in_file, str_buffer, s))
{
cout << CLI_MSG_VAR << "readcount= " << readcount << endl;
cout << CLI_MSG_VAR << "snd_pcm_writei= " << snd_pcm_writei( pcm_handle,
str_buffer, readcount) << endl;
}
free(str_buffer);
return 0;
}
----------------------------------------------------------------------------
Bringing you mounds of caffeinated joy
>>> http://thinkgeek.com/sf <<<
_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel