📄 fileplayer.cc
字号:
/* MPEG/WAVE Sound library (C) 1997 by Jung woo-jae */// Fileplayer.cc// It's an example for how to use MPEG/WAVE Sound library#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <string.h>#include "mpegsound.h"// File player superclassFileplayer::Fileplayer(){ __errorcode = SOUND_ERROR_OK; player = NULL;};Fileplayer::~Fileplayer(){ delete player;};// Wave file playerWavefileplayer::Wavefileplayer(){ loader = NULL; server = NULL;}Wavefileplayer::~Wavefileplayer(){ if (loader) delete loader; if (server) delete server;}boolWavefileplayer::openfile(char *filename, char *device){// Player if (device == NULL) device = Rawplayer::defaultdevice; if (device[0] == '/') player = new Rawplayer; else { if (device[0] == '-') device = NULL; player = new Rawtofile; } if (player == NULL) return seterrorcode(SOUND_ERROR_MEMORYNOTENOUGH); if (!player->initialize(device)) return seterrorcode(player->geterrorcode());// Loader { int err; if ((loader = Soundinputstream::hopen(filename, &err)) == NULL) return seterrorcode(err); }// Server if ((server = new Wavetoraw(loader, player)) == NULL) return seterrorcode(SOUND_ERROR_MEMORYNOTENOUGH); return server->initialize();}voidWavefileplayer::setforcetomono(bool flag){ server->setforcetomono(flag);};boolWavefileplayer::playing(int verbose){ if (!server->run()) return false; // Read first time if (verbose > 0) { fprintf(stderr, "Verbose : %dbits, " "%dHz, " "%s\n", server->getsamplesize(), server->getfrequency(), server->isstereo()? "Stereo" : "Mono"); } while (server->run()); // Playing seterrorcode(server->geterrorcode()); if (geterrorcode() == SOUND_ERROR_FINISH) return true; return false;}// MpegfileplayerMpegfileplayer::Mpegfileplayer(){ loader = NULL; server = NULL;};Mpegfileplayer::~Mpegfileplayer(){ if (loader) delete loader; if (server) delete server;}boolMpegfileplayer::openfile(char *filename, char *device){// Player if (device == NULL) device = Rawplayer::defaultdevice; if (device[0] == '/') player = new Rawplayer; else { if (device[0] == '-') device = NULL; player = new Rawtofile; } if (player == NULL) return seterrorcode(SOUND_ERROR_MEMORYNOTENOUGH); if (!player->initialize(device)) return seterrorcode(player->geterrorcode());// Loader { int err; if ((loader = Soundinputstream::hopen(filename, &err)) == NULL) return seterrorcode(err); }// Server if ((server = new Mpegtoraw(loader, player)) == NULL) return seterrorcode(SOUND_ERROR_MEMORYNOTENOUGH);// Initialize server server->initialize(filename); return true;}voidMpegfileplayer::setforcetomono(bool flag){ server->setforcetomono(flag);};voidMpegfileplayer::setdownfrequency(int value){ server->setdownfrequency(value);};boolMpegfileplayer::playing(int verbose){ if (!server->run(-1)) return false; // Initialize MPEG Layer 3 if (verbose > 0) showverbose(verbose); while (server->run(100)); // Playing seterrorcode(server->geterrorcode()); if (seterrorcode(SOUND_ERROR_FINISH)) return true; return false;}#ifdef PTHREADEDMPEGboolMpegfileplayer::playingwiththread(int verbose, int framenumbers){ if (framenumbers < 20) return playing(verbose); server->makethreadedplayer(framenumbers); if (!server->run(-1)) return false; // Initialize MPEG Layer 3 if (verbose > 0) showverbose(verbose); while (server->run(100)); // Playing server->freethreadedplayer(); seterrorcode(server->geterrorcode()); if (seterrorcode(SOUND_ERROR_FINISH)) return true; return false;}#endifvoidMpegfileplayer::showverbose(int verbose){ static char *modestring[4] = { "stereo", "joint stereo", "dual channel", "mono" }; fprintf(stderr, "Verbose: MPEG-%d Layer %d, %s,\n\t%dHz%s, %dkbit/s, ", server->getversion() + 1, server->getlayer(), modestring[server->getmode()], server->getfrequency(), server->getdownfrequency()? "//2" : "", server->getbitrate()); fprintf(stderr, server->getcrccheck() ? "with crc check\n" : "without crc check\n"); if (verbose > 1) { fprintf(stderr, "Songname : %s\n" "Artist : %s\n" "Album : %s\n" "Year : %s\n" "Comment : %s\n", server->getname(), server->getartist(), server->getalbum(), server->getyear(), server->getcomment()); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -