如何在 C 项目中包含 libsdn 和 portaudio?

问题描述 投票:0回答:1

项目

我目前正在从事的“项目”是一个tui wav 播放器我正处于第一阶段,我想阅读和播放 wav 歌曲/声音。

请考虑到我在 4 周前开始使用 C,所以 我完全是新手

我没有使用任何IDE,并且

cc
来编译(
cc main.c -o main -lm
)

我做过的事

我通过yay/pacman下载了portaudio,我从here下载了libsndsource,在文档的帮助下安装(./configure && make && make install)。

libsnd 源代码与我的 main.c 代码位于同一文件夹中。

输出

ls -a

 .    c-econio  'Goran Bregović - Kalashnikov.mp3'   kalasnikow.wav      main.c       test.c
 ..   .git      'Goran Bregović - Kalashnikov.wav'   libsndfile-1.0.28   random.mp3

c-econiolibsndfile-1.0.28是我想使用的dir's(库)(稍后将使用econio)。如前所述,portaudio是通过包管理器安装的。

我不知道

#inlude <portauido>
是否有效,因为我不知道如何在没有libsnd的情况下测试它。

主要问题

如何将 portaudio 和 libsnd 包含到此代码中以及如何测试它?我需要向编译器(cc)添加一些东西吗? 我使用的是linux。

代码

main.c

#include <dirent.h>
#include <stdio.h>
#include <string.h>
#include <portaudio.h>

int listwav() {
    int i = 1;
     DIR *d;
    struct dirent *entry;
    d = opendir("."); // Megnyitom az éppenleges DIR-t.
    if (d) {
        while ((entry = readdir(d)) != NULL) {  // Ameddig van file + mp3 kiiratás. 
            if (strlen(entry->d_name) > 4 && strcmp(entry->d_name + strlen(entry->d_name) - 4, ".wav") == 0) {
              printf("\t%d %s\n",i, entry->d_name);
              i++; 
            }
        }
        closedir(d);
    }
    return (0);
}

void play(){ // play audio "ffplay -v 0 -nodisp -autoexit"
  printf("What to play? \n");
  listwav();
  // system("playerctl play");
}

void stop(){
  printf("Stopped\n");
  // system("playerctl stop");
}

int chose(){
  int chosen = 0;    
  
  printf("Choose what to do:\n 1.Play\n 2.Stop\n 3.Exit\n Chosen: "); scanf("%d", &chosen);
  while (chosen != 3){
    switch (chosen) {
      case 1: play(); break;
      case 2: stop(); break;
    }
    return 0;
  }
}

 /// -----
 int main(){
   chose();

 }

编辑: 我使用的文件夹的未更新版本:https://github.com/Lolis4TheWin/mpc3

c linux audio portaudio
1个回答
0
投票

所以我终于明白了!

下载并制作库

  1. 下载源码
  2. 阅读源文件内的安装手册
  3. 照它说的去做(
    ./configure; make ; make install
    )
  4. 您可以删除源,该库位于您的
    /usr/local/lib
    目录中。

编译代码

A) 选项

gcc -lsndfile main.c -o main -lm && ./main 
是我编译时必须使用的。

-l
之后出现库名称。
-o
代表输出文件,
-lm
代表一些库,我必须包含linux的原因。 (我认为,不是基于信息。)

我必须包括这样的库:

#include <sndfile>
#include <portaudio>

B) 选项

就是用里面的路径链接库

""

#include "usr/local/lib/libsndfila.a"
© www.soinside.com 2019 - 2024. All rights reserved.