Esempio n. 1
0
/*********************** Main program **********************/
int main(int argc, char **argv)
{
    register int		err;

    // No wave data loaded yet
    WavePtr = 0;

    if (argc < 2)
    {
        printf("You must supply the name of a 16-bit mono WAVE file to play\n");
        return 0;
    }

    // Load the wave file
    if (waveLoad(argv[1]))
    {
        printf("Could not load wave file\n");
        return 0;
    }

    if(WaveBits != 16)
    {
        printf("16 bit PCM audio only!!!\n");
        return 0;
    }

    printf("Sample total %d\n", WaveSize);
    printf("Sample rate  %d\n", WaveRate);
    printf("Sample bits  %d\n", WaveBits);
    add_effect(fuzz_init, fuzz_run, fuzz_end, "Fuzz");
    printf("Finished effect line\n");

    // Open audio card we wish to use for playback
    if ((err = snd_pcm_open(&PlaybackHandle, &SoundCardPortName[0], SND_PCM_STREAM_PLAYBACK, 0)) < 0)
    {
        printf("Can't open audio %s: %s\n", &SoundCardPortName[0], snd_strerror(err));
        return 0;
    }

    // Set the audio card's hardware parameters (sample rate, bit resolution, etc)
    if ((err = snd_pcm_set_params(PlaybackHandle, SND_PCM_FORMAT_S16, SND_PCM_ACCESS_RW_INTERLEAVED, WaveChannels, WaveRate, 1, 10000)) < 0)
    {
        printf("Can't set sound parameters: %s\n", snd_strerror(err));
        return 0;
    }

    // Play the waveform
    play_audio();

    // Close sound card
    snd_pcm_close(PlaybackHandle);

    // Free the WAVE data
    free_wave_data();

    return 0;
}
Esempio n. 2
0
/*!
 * @brief プログラムのエントリポイント
 *
 * 使い方<br>
 *   $ ./main [wavefile-name] N
 * @param [in] argc コマンドライン引数の数
 * @param [in] argv コマンドライン引数
 * @return 終了コード
 */
int main(int argc, char *argv[]) {
  unsigned int           N;
  unsigned int           k;
  double                 frq_rate;
  double       *restrict f_real;
  double       *restrict f_imag;
  WAVE_DATA    *restrict wd;
  POINT        *restrict points;
  RANGE                  range = {{0.0, 0.0}, {0.0, 0.0}};

  if (argc != 3) {
    fprintf(stderr, "bad argument!\n");
    return EXIT_FAILURE;
  }
  wd = read_wave_file(argv[1]);
  N  = str2int(argv[2]);
  print_wave_header(wd);

  f_real = CALLOC(double, N);
  f_imag = CALLOC(double, N);
  points = CALLOC(POINT, N);
  if (f_real == NULL || f_imag == NULL || points == NULL) {
    fputs("メモリ確保エラーです\n", stderr);
    return EXIT_FAILURE;
  }
  auto_dft(f_real, f_imag, wd->s_data1, NULL, N);

  frq_rate = (double)wd->samples_per_sec / N;
  for (k = 0; k < N; k++) {
    points[k].x = frq_rate * k;
    points[k].y = sqrt(SQ(f_real[k]) + SQ(f_imag[k]));
    if (range.max.y < points[k].y) range.max.y = points[k].y;
  }
  range.max.x = (double)wd->samples_per_sec / 2;
  range.max.y = (range.max.y == 0.0 ? 1.0 : range.max.y * 1.2);

  // print_result(points, N);
  if (show_gplot(points, N, range) == -1) {
    fputs("gnuplotを起動できません\n", stderr);
    fputs("gnuplotにPATHが通っているか、確認してください\n", stderr);
  }

  FREE(&f_real);
  FREE(&f_imag);
  FREE(&points);
  free_wave_data(wd);
  return EXIT_SUCCESS;
}