-3

C ++プログラミングの初心者で、基本的にmpg123を使用して単純なmp3プレーヤーを作成しようとしています。コードはmain()ではうまく機能しますが、サブで呼び出してパス+ファイルを送信して再生しようとすると、うまくいきませんそれを機能させます。

gcc は const char... と char 変換について不平を言います..「1.c:71:18: エラー: 'char' から 'const char*' への無効な変換 [-fpermissive]」

#include <ao/ao.h>
#include <mpg123.h>

#define BITS 8

#include <iostream>
using namespace std;

void playaudio(const char * trakl)
{

//works when called here including path
//const char *traklink="/home/pi/downloads/00000050.mp3";
const char * traklink=trakl;



   mpg123_handle *mh;
    unsigned char *buffer;
    size_t buffer_size;
    size_t done;
    int err;

    int driver;
    ao_device *dev;

    ao_sample_format format;
    int channels, encoding;
    long rate;

   /* if(argc < 2)
        exit(0);
*/
    /* initializations */
    ao_initialize();
    driver = ao_default_driver_id();
    mpg123_init();
    mh = mpg123_new(NULL, &err);
    buffer_size = mpg123_outblock(mh);
    buffer = (unsigned char*) malloc(buffer_size * sizeof(unsigned char));

    /* open the file and get the decoding format */
    //mpg123_open(mh,traklink);
    mpg123_open(mh,traklink);
     mpg123_getformat(mh, &rate, &channels, &encoding);

    /* set the output format and open the output device */
   format.bits = mpg123_encsize(encoding) * BITS;
    format.rate = rate;
    format.channels = channels;
    format.byte_format = AO_FMT_NATIVE;
    format.matrix = 0;
    dev = ao_open_live(driver, &format, NULL);

    /* decode and play */
    while (mpg123_read(mh, buffer, buffer_size, &done) == MPG123_OK)
        //ao_play(dev, buffer, done);
        ao_play(dev, (char*)buffer, done);
    /* clean up */
    free(buffer);
    ao_close(dev);
    mpg123_close(mh);
    mpg123_delete(mh);
    mpg123_exit();
    ao_shutdown();

//  return 0;
}

int main()
{
const char * trakl="/home/pi/downloads/00000050.mp3";

playaudio(* trakl);

return 0;
}    
4

1 に答える 1

0

あなたはplayaudioこのように呼んでいます:

playaudio(* trakl);

これは無効です。trak1がタイプconst char *の場合、これはそれ*trak1がタイプであることを意味しconst charます。playaudioが必要なconst char *場合は、代わりに次のように呼び出す必要があります。

playaudio(trakl);
于 2013-10-26T07:40:35.903 に答える