大家晚上好。 首先,对不起我的英语,我试图更好地了解这种语言。
我有三个文件:
现在,我正在尝试将音频流程与主代码分开。但我不知道如何实现这一点。 我看到C ++ 11参考,我研究了pthreded模块的条件变量,但我该如何实现呢?
例如,在其中一个库音频文件中使用这样的工具是正确的吗?
//mpg123.c
int playmp3(char* filename,int action)
{
static mpg123_handle *mh;
static unsigned char *buffer;
/*...Many Static Dichiaration.../*
static long rate;
char* canzone=filename;
if (action==0)
{
/* Inizialize */
/*...*/
/* open the file and get the decoding format */
mpg123_open(mh,canzone);
mpg123_getformat(mh, &rate, &channels, &encoding);
/* set the output format and open the output device */
format.bits = mpg123_encsize(encoding) * BITS;
/*...*/
dev = ao_open_live(driver, &format, NULL);
}
if(action==1)
{
/* decode and play */
while (action==1&&mpg123_read(mh, buffer, buffer_size, &done) == MPG123_OK)
if((ao_play(dev, (char*)buffer, done)==0)&&action==1)
}
if(action==2)
{
/* clean up */
free(buffer);
ao_close(dev);
mpg123_close(mh);
/*...*/
}
}
就像你可以看到我需要extern其他文件中的代码,因为“playmp3”是用C语言写的,“playother”是用C ++写的。
在“Lettore.cpp”中我如何控制音频流?我可以在main.cpp的一个线程中直接包含Lettore.cpp的函数吗?
感谢您的时间
Ps:如果这个问题与规则不一致,我会立即修改这个问题!
编辑:为清楚起见,我还附上了我对Lettore.cpp的尝试
//Lettore.cpp
#include <iostream>
#include "playother.h"
#include "Lettore.h"
extern "C" {
#include "mpg123.h"
}
bool Audio::isMp3(char * nome)
{
//Reconize if the file is an mp3.
}
void Audio::inizialize(char * filename)
{
Audio::currentrack=filename;
Audio::isOpen=true;
if (isMp3(Audio::tracciacorrente)){
playmp3(Audio::currentrack,0);
}else{
playmusic(Audio::currentrack,0);
}
}
void Audio::play()
{
if (isMp3(Audio::currentrack)){
playmp3(Audio::currentrack,1);
}else{
playmusic(Audio::currentrack,1);
}
}
void Audio::close()
{
if (isMp3(Audio::currentrack)){
playmp3(Audio::currentrack,2);
}else{
playmusic(Audio::currentrack,2);
}
Audio::currentrack=NULL;
Audio::isOpen=false;
}
void Audio::pause()
{
if (isMp3(Audio::currentrack)){
playmp3(Audio::currentrack,4);
}else{
playmusic(Audio::currentrack,4);
}
}
bool Audio::get_openstatus()
{
return Audio::isOpen;
}
现在问题是一样的:如果这是两个文件的正确实现,我应该写些关于main.cpp的命令来使用这些文件?