/** * Start the audio playback and recording * * @param a Audio object * * @return 0 if success, otherwise errorcode */ int audio_start(struct audio *a) { int err; if (!a) return EINVAL; err = stream_start(a->strm); if (err) return err; /* Audio filter */ if (!a->filtl.head && !list_isempty(aufilt_list())) { err = aufilt_setup(a); if (err) return err; } /* configurable order of play/src start */ if (a->cfg.src_first) { err |= start_source(&a->tx, a); err |= start_player(&a->rx, a); } else { err |= start_player(&a->rx, a); err |= start_source(&a->tx, a); } return err; }
// --------------------------------------------------------------------------- void play_playlist(char* player, char* file) { char buffer[512]; char* line; FILE* f = fopen(file, "r"); if(f == NULL) return; while(fgets(buffer, 512, f) != NULL && !stop) { line = buffer; line = trim_string(line); if(line[0] == '#') continue; // skip comments and meta information // otherwise, check if it is an mp3 and if yes, play it if(is_mp3(line)) { char abs_path[256]; // if relative path, add root path if(line[0] == '/') strcpy(abs_path, line); else { strcpy(abs_path, root_path); strcat(abs_path, "/"); strcat(abs_path, line); } start_player(player, abs_path); } else { //printf("no mp3: %s\n", line); } } fclose(f); }
// --------------------------------------------------------------------------- int main(int argc, char* argv[]) { // initialize signal handlers signal(SIGINT, (sig_t)cleanup); signal(SIGHUP, (sig_t)next_song); // load settings Settings_Load("play.conf"); // start playing if(is_mp3(argv[1])) { start_player(Settings_Get("program", "player"), argv[1]); } else if(is_playlist(argv[1])) { // get path int i; for(i = strlen(argv[1]) - 1; i >= 0; i--) { if(argv[1][i] == '/') { strcpy(root_path, argv[1]); root_path[i] = '\0'; break; } } //printf("playlist\r\n"); play_playlist(Settings_Get("program", "player"), argv[1]); } // done playing, reset id3 info FILE* f = fopen(Settings_Get("path", "current_song"), "w"); fprintf(f, "(no artist) - (no title)\r\n"); fclose(f); Settings_Unload(); return 0; }
/** * Start the audio playback and recording * * @param a Audio object * * @return 0 if success, otherwise errorcode */ int audio_start(struct audio *a) { int err; if (!a) return EINVAL; /* Audio filter */ if (!list_isempty(aufilt_list())) { err = aufilt_setup(a); if (err) return err; } /* configurable order of play/src start */ if (a->cfg.src_first) { err = start_source(&a->tx, a); err |= start_player(&a->rx, a); } else { err = start_player(&a->rx, a); err |= start_source(&a->tx, a); } if (err) return err; if (a->tx.ac && a->rx.ac) { if (!a->started) { info("%H%H", autx_print_pipeline, &a->tx, aurx_print_pipeline, &a->rx); } a->started = true; } return err; }