我目前正在从事的“项目”是一个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-econio和libsndfile-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
所以我终于明白了!
./configure; make ; make install
)/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"