Exemple #1
0
int snd_open_stream()
{
    int samplerate;
    char info_buf[256];

    PaDeviceIndex pa_dev_id;
    PaStreamParameters pa_params;
    PaError pa_err;
    const PaDeviceInfo *pa_dev_info;

    if(cfg.audio.dev_count == 0)
    {
        print_info("ERROR: no sound device with input channels found", 1);
        return 1;
    }

    buf_size = PA_FRAMES * 2;
    framepacket_size = PA_FRAMES * cfg.audio.channel;

    pa_pcm_buf = (short*)malloc(buf_size * sizeof(short));
    encode_buf = (char*)malloc(buf_size * sizeof(char));

    rb_init(&rec_rb, 16 * buf_size * sizeof(short));
    rb_init(&stream_rb, 16 * buf_size * sizeof(short));

    samplerate = cfg.audio.samplerate;

    pa_dev_id = cfg.audio.pcm_list[cfg.audio.dev_num]->dev_id;

    pa_dev_info = Pa_GetDeviceInfo(pa_dev_id);
    if(pa_dev_info == NULL)
    {
        snprintf(info_buf, 127, "Error getting device Info (%d)", pa_dev_id);
        print_info(info_buf, 1);
        return 1;
    }

    pa_params.device = pa_dev_id;
    pa_params.channelCount = cfg.audio.channel;
    pa_params.sampleFormat = paInt16;
    pa_params.suggestedLatency = pa_dev_info->defaultHighInputLatency;
    pa_params.hostApiSpecificStreamInfo = NULL;

    pa_err = Pa_IsFormatSupported(&pa_params, NULL, samplerate);
    if(pa_err != paFormatIsSupported)
    {
        if(pa_err == paInvalidSampleRate)
        {
            snprintf(info_buf, sizeof(info_buf),
                    "Samplerate not supported: %dHz\n"
                    "Using default samplerate: %dHz",
                    samplerate, (int)pa_dev_info->defaultSampleRate);
            print_info(info_buf, 1);

            if(Pa_IsFormatSupported(&pa_params, NULL,
               pa_dev_info->defaultSampleRate) != paFormatIsSupported)
            {
                print_info("FAILED", 1);
                return 1;
            }
            else
            {
                samplerate = (int)pa_dev_info->defaultSampleRate;
                cfg.audio.samplerate = samplerate;
                cfg.rec.samplerate = samplerate;
                update_samplerates();
            }
        }
        else
        {
            snprintf(info_buf, sizeof(info_buf), "PA: Format not supported: %s\n",
                    Pa_GetErrorText(pa_err));
            print_info(info_buf, 1);
            return 1;
        }
    }

    pa_err = Pa_OpenStream(&stream, &pa_params, NULL,
                            samplerate, PA_FRAMES,
                            paNoFlag, snd_callback, NULL);

    if(pa_err != paNoError)
    {
        printf("error opening sound device: \n%s\n", Pa_GetErrorText(pa_err));
        return 1;
    }

    
    Pa_StartStream(stream);
    return 0;
}
Exemple #2
0
int snd_open_stream(void)
{

    int samplerate;
    char info_buf[256];

    PaDeviceIndex pa_dev_id;
    PaStreamParameters pa_params;
    PaError pa_err;
    const PaDeviceInfo *pa_dev_info;

    if(cfg.audio.dev_count == 0)
    {
        print_info(_("ERROR: no sound device with input channels found"), 1);
        return 1;
    }


    pa_frames = (cfg.audio.buffer_ms/1000.0)*cfg.audio.samplerate;

    snd_reset_samplerate_conv(SND_STREAM);
    snd_reset_samplerate_conv(SND_REC);


    framepacket_size = pa_frames * cfg.audio.channel;

    pa_pcm_buf = (short*)malloc(16 * framepacket_size * sizeof(short));
    encode_buf = (char*)malloc(16 * framepacket_size * sizeof(char));

    rb_init(&rec_rb, 16 * framepacket_size * sizeof(short));
    rb_init(&stream_rb, 16 * framepacket_size * sizeof(short));

    samplerate = cfg.audio.samplerate;

    pa_dev_id = cfg.audio.pcm_list[cfg.audio.dev_num]->dev_id;

    pa_dev_info = Pa_GetDeviceInfo(pa_dev_id);
    if(pa_dev_info == NULL)
    {
        snprintf(info_buf, 127, _("Error getting device Info (%d)"), pa_dev_id);
        print_info(info_buf, 1);
        return 1;
    }

    pa_params.device = pa_dev_id;
    pa_params.channelCount = cfg.audio.channel;
    pa_params.sampleFormat = paInt16;
    pa_params.suggestedLatency = pa_dev_info->defaultHighInputLatency;
    pa_params.hostApiSpecificStreamInfo = NULL;

    pa_err = Pa_IsFormatSupported(&pa_params, NULL, samplerate);
    if(pa_err != paFormatIsSupported)
    {
        if(pa_err == paInvalidSampleRate)
        {
            snprintf(info_buf, sizeof(info_buf),
                    _("Samplerate not supported: %dHz\n"
                    "Using default samplerate: %dHz"),
                    samplerate, (int)pa_dev_info->defaultSampleRate);
            print_info(info_buf, 1);

            if(Pa_IsFormatSupported(&pa_params, NULL,
               pa_dev_info->defaultSampleRate) != paFormatIsSupported)
            {
                print_info(_("PA: Format not supported"), 1);
                return 1;
            }
            else
            {
                samplerate = (int)pa_dev_info->defaultSampleRate;
                cfg.audio.samplerate = samplerate;
                update_samplerates();
            }
        }
        else
        {
            snprintf(info_buf, sizeof(info_buf), _("PA: Format not supported: %s\n"),
                    Pa_GetErrorText(pa_err));
            print_info(info_buf, 1);
            return 1;
        }
    }

    pa_err = Pa_OpenStream(&stream, &pa_params, NULL,
                            samplerate, pa_frames,
                            paNoFlag, snd_callback, NULL);

    if(pa_err != paNoError)
    {
        printf(_("error opening sound device: \n%s\n"), Pa_GetErrorText(pa_err));
        return 1;
    }

    stream_buf = new char[16 * pa_frames*2 * sizeof(short)];
    record_buf = new char[16 * pa_frames*2 * sizeof(short)];
    dsp = new DSPEffects(pa_frames, cfg.audio.channel, samplerate);
    
    Pa_StartStream(stream);
    return 0;
}