当前位置:   article > 正文

c语言实现音乐播放_c语言播放音效

c语言播放音效

一个基本的音乐播放器需要使用第三方库,例如PortAudio或SDL来处理音频。以下是一个简单的例子,使用PortAudio库播放音频文件。

首先,你需要安装PortAudio库。在Linux上,你可以使用包管理器安装它,例如在Ubuntu上使用:

sudo apt-install portaudio19-dev

代码

  1. #include <stdio.h>
  2. #include <portaudio.h>
  3. #define SAMPLE_RATE (44100)
  4. #define FRAMES_PER_BUFFER (1024)
  5. #define NUM_SECONDS (5)
  6. #define NUM_CHANNELS (2)
  7. static int callback(const void *inputBuffer, void *outputBuffer,
  8. unsigned long framesPerBuffer,
  9. const PaStreamCallbackTimeInfo* timeInfo,
  10. PaStreamCallbackFlags statusFlags,
  11. void *userData) {
  12. (void) inputBuffer; /* Prevent unused variable warning. */
  13. float *out = (float*) outputBuffer;
  14. for (int i = 0; i < framesPerBuffer; i++) {
  15. *out++ = (float) (*userData) / 32768.0f; /* scale to maximum amplitude */
  16. (*userData) += 1; /* increment sample pointer */
  17. if (userData >= &sine[DATA_SIZE]) {
  18. userData = &sine[0]; /* loop sample buffer */
  19. }
  20. }
  21. return 0;
  22. }
  23. int main(int argc, char *argv[]) {
  24. short sine[NUM_SECONDS * SAMPLE_RATE];
  25. for (int i = 0; i < NUM_SECONDS * SAMPLE_RATE; ++i) {
  26. sine[i] = (short)(32767 * sin(2 * M_PI * (i / (double)SAMPLE_RATE)) + 32768);
  27. }
  28. PaError err = Pa_Initialize();
  29. if (err != paNoError) {
  30. fprintf(stderr, "Error initializing PortAudio: %s\n", Pa_GetErrorText(err));
  31. return err;
  32. }
  33. PaStream *stream;
  34. err = Pa_OpenDefaultStream(&stream, NUM_CHANNELS, NUM_CHANNELS, paFloat32, SAMPLE_RATE, FRAMES_PER_BUFFER, callback, &sine);
  35. if (err != paNoError) {
  36. fprintf(stderr, "Error opening stream: %s\n", Pa_GetErrorText(err));
  37. return err;
  38. }
  39. err = Pa_StartStream(stream);
  40. if (err != paNoError) {
  41. fprintf(stderr, "Error starting stream: %s\n", Pa_GetErrorText(err));
  42. return err;
  43. }
  44. printf("Play for 5 seconds.\n");
  45. Pa_Sleep(NUM_SECONDS * 1000);
  46. err = Pa_StopStream(stream);
  47. if (err != paNoError) {
  48. fprintf(stderr, "Error stopping stream: %s\n", Pa_GetErrorText(err));
  49. return err;
  50. }
  51. err = Pa_CloseStream(stream);
  52. if (err != paNoError) {
  53. fprintf(stderr, "Error closing stream: %s\n", Pa_GetErrorText(err));
  54. return err;
  55. }
  56. Pa_Terminate();
  57. return 0;
  58. }

这个代码使用了PortAudio的回调模式播放了一个简单的正弦波,你需要自行扩展代码以支持音频文件的读取和播放。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/1006930
推荐阅读
相关标签
  

闽ICP备14008679号