使用GTK和c+播放音频文件+; 我现在正在构建一个非常简单的音乐播放器,它包含了GTK+和C++代码,但是现在我无法用C++代码来打开和播放音频文件。 #include <gtk/gtk.h> // simple music player to practice gtk and c++// int main(int argc, char* argv[]) { gtk_init(&argc,&argv); GtkWidget *window; GtkWidget *playButton; GtkWidget *fileButton; GtkWidget *frame; GtkWidget *Dialog; window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(window), 400, 400); frame = gtk_fixed_new(); gtk_container_add(GTK_CONTAINER(window), frame); playButton = gtk_button_new_with_label("Play"); gtk_widget_set_size_request(playButton,80,40); gtk_fixed_put(GTK_FIXED(frame),playButton,40,330); fileButton = gtk_button_new_with_label("Open"); gtk_widget_set_size_request(fileButton,80,40); gtk_fixed_put(GTK_FIXED(frame),fileButton,40,260); gtk_widget_show_all(window); gtk_main(); return 0; }

使用GTK和c+播放音频文件+; 我现在正在构建一个非常简单的音乐播放器,它包含了GTK+和C++代码,但是现在我无法用C++代码来打开和播放音频文件。 #include <gtk/gtk.h> // simple music player to practice gtk and c++// int main(int argc, char* argv[]) { gtk_init(&argc,&argv); GtkWidget *window; GtkWidget *playButton; GtkWidget *fileButton; GtkWidget *frame; GtkWidget *Dialog; window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(window), 400, 400); frame = gtk_fixed_new(); gtk_container_add(GTK_CONTAINER(window), frame); playButton = gtk_button_new_with_label("Play"); gtk_widget_set_size_request(playButton,80,40); gtk_fixed_put(GTK_FIXED(frame),playButton,40,330); fileButton = gtk_button_new_with_label("Open"); gtk_widget_set_size_request(fileButton,80,40); gtk_fixed_put(GTK_FIXED(frame),fileButton,40,260); gtk_widget_show_all(window); gtk_main(); return 0; },c++,gtk,audio-player,C++,Gtk,Audio Player,但我的问题是,我不知道如何放置代码,我应该创建一个函数,并在单击open按钮时设置对该函数的回调。正确的?第二个问题是,无论我多么努力地搜索,我似乎都找不到如何播放音频文件,非常感谢 如果您不介意使用外部库,则可以非常轻松地播放各种格式的音频文件。下面是一个如何播放.wav音频文件的示例 #include <stdio.h> #include <allegro5/allegro.h> #include <allegro5/allegro_audio.h> #i

但我的问题是,我不知道如何放置代码,我应该创建一个函数,并在单击open按钮时设置对该函数的回调。正确的?第二个问题是,无论我多么努力地搜索,我似乎都找不到如何播放音频文件,非常感谢

如果您不介意使用外部库,则可以非常轻松地播放各种格式的音频文件。下面是一个如何播放.wav音频文件的示例

#include <stdio.h>
#include <allegro5/allegro.h>
#include <allegro5/allegro_audio.h>
#include <allegro5/allegro_acodec.h>

int main(int argc, char **argv){

   ALLEGRO_DISPLAY *display = NULL;
   ALLEGRO_SAMPLE *sample=NULL;

   if(!al_init()){
      fprintf(stderr, "failed to initialize allegro!\n");
      return -1;
   }

   if(!al_install_audio()){
      fprintf(stderr, "failed to initialize audio!\n");
      return -1;
   }

   if(!al_init_acodec_addon()){
      fprintf(stderr, "failed to initialize audio codecs!\n");
      return -1;
   }

   if (!al_reserve_samples(1)){
      fprintf(stderr, "failed to reserve samples!\n");
      return -1;
   }

   sample = al_load_sample( "footstep.wav" );

   if (!sample){
      printf( "Audio clip sample not loaded!\n" ); 
      return -1;
   }

   display = al_create_display(640, 480);

   if(!display){
      fprintf(stderr, "failed to create display!\n");
      return -1;
   }

   /* Loop the sample until the display closes. */
   al_play_sample(sample, 1.0, 0.0,1.0,ALLEGRO_PLAYMODE_LOOP,NULL);

   al_rest(10.0);

   al_destroy_display(display);
   al_destroy_sample(sample);
   return 0;
}
#包括
#包括
#包括
#包括
int main(int argc,字符**argv){
快板显示*显示=NULL;
ALLEGRO_样本*SAMPLE=NULL;
如果(!al_init()){
fprintf(stderr,“未能初始化快板!\n”);
返回-1;
}
如果(!al_install_audio()){
fprintf(stderr,“初始化音频失败!\n”);
返回-1;
}
如果(!al_init_acodec_addon()){
fprintf(stderr,“未能初始化音频编解码器!\n”);
返回-1;
}
如果(!铝储备样品(1)){
fprintf(stderr,“未能保留样本!\n”);
返回-1;
}
样本=负载样本(“footprint.wav”);
如果(!样本){
printf(“未加载音频剪辑样本!\n”);
返回-1;
}
显示=创建显示(640480);
如果(!显示){
fprintf(stderr,“未能创建显示!\n”);
返回-1;
}
/*循环采样,直到显示屏关闭*/
al_play_示例(示例,1.0,0.0,1.0,快板播放模式循环,空);
al_rest(10.0);
铝显示器(显示器);
销毁样品(样品);
返回0;
}

如果不允许我们使用外部库怎么办?还有,有没有办法在不需要外部文件的情况下播放声音?
#include <stdio.h>
#include <allegro5/allegro.h>
#include <allegro5/allegro_audio.h>
#include <allegro5/allegro_acodec.h>

int main(int argc, char **argv){

   ALLEGRO_DISPLAY *display = NULL;
   ALLEGRO_SAMPLE *sample=NULL;

   if(!al_init()){
      fprintf(stderr, "failed to initialize allegro!\n");
      return -1;
   }

   if(!al_install_audio()){
      fprintf(stderr, "failed to initialize audio!\n");
      return -1;
   }

   if(!al_init_acodec_addon()){
      fprintf(stderr, "failed to initialize audio codecs!\n");
      return -1;
   }

   if (!al_reserve_samples(1)){
      fprintf(stderr, "failed to reserve samples!\n");
      return -1;
   }

   sample = al_load_sample( "footstep.wav" );

   if (!sample){
      printf( "Audio clip sample not loaded!\n" ); 
      return -1;
   }

   display = al_create_display(640, 480);

   if(!display){
      fprintf(stderr, "failed to create display!\n");
      return -1;
   }

   /* Loop the sample until the display closes. */
   al_play_sample(sample, 1.0, 0.0,1.0,ALLEGRO_PLAYMODE_LOOP,NULL);

   al_rest(10.0);

   al_destroy_display(display);
   al_destroy_sample(sample);
   return 0;
}