output_alsa.c

#include "output_alsa.h"

snd_pcm_t* output_alsa_init(config_t *config) {
  snd_pcm_t *alsa_dev;
  int err;
  
  /*if (config->rate != 8000 && config->rate != 16000) {
    fputs("Unsupported bitrate for ALSA", stderr);
    exit(EXIT_FAILURE);
  }*/
  
  err = snd_pcm_open(&alsa_dev, config->output_device_name, SND_PCM_STREAM_PLAYBACK, 0);
  if (err < 0) {
    printf("ERROR (1b): %s\n", snd_strerror(err));
    exit(EXIT_FAILURE);
  }
  err = snd_pcm_set_params(alsa_dev, SND_PCM_FORMAT_S16, SND_PCM_ACCESS_RW_INTERLEAVED, 1, config->rate, 1, 100000);
  if (err < 0) {
    printf("ERROR (2b): %s\n", snd_strerror(err));
    exit(EXIT_FAILURE);
  }
  
  return alsa_dev;
}

void output_alsa_write(snd_pcm_t* alsa_dev, signal_t *signal) {
  int err;
  
  err = snd_pcm_writei(alsa_dev, signal->data, signal->num_of_sample);
  if (err < 0) {
    err = snd_pcm_recover(alsa_dev, err, 0);
  }
  if (err < 0) {
    printf("ERROR (3b): %s\n", snd_strerror(err));
    exit(EXIT_FAILURE);
  }
  if (err < signal->num_of_sample) {
    puts("error");
  }
}

XHTML generated by highlight (http://www.andre-simon.de/) from output_alsa.c



Copyright (c) 1999-2015, Robert Paciorek (http://www.opcode.eu.org/), BSD/MIT-type license


Redystrybucja wersji źródłowych i wynikowych, po lub bez dokonywania modyfikacji JEST DOZWOLONA, pod warunkiem zachowania niniejszej informacji o prawach autorskich. Autor NIE ponosi JAKIEJKOLWIEK odpowiedzialności za skutki użytkowania tego dokumentu/programu oraz za wykorzystanie zawartych tu informacji.

This text/program is free document/software. Redistribution and use in source and binary forms, with or without modification, ARE PERMITTED provided save this copyright notice. This document/program is distributed WITHOUT any warranty, use at YOUR own risk.

Valid XHTML 1.1 Dokument ten (URL: http://www.opcode.eu.org/inne/other_projects/generator/output_alsa.c) należy do serwisu OpCode. Autorem tej strony jest Robert Paciorek, wszelkie uwagi proszę kierować na adres e-mail serwisu: webmaster@opcode.eu.org.
Data ostatniej modyfikacji artykulu: '2014-01-07 19:27:43 (UTC)' (data ta może być zafałszowana niemerytorycznymi modyfikacjami artykułu).