Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int playMp3(string thePath)
- {
- 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;
- /* 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, thePath.c_str());
- 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);
- char *workAround = new char[buffer_size * sizeof(unsigned char)];
- /* decode and play */
- while (mpg123_read(mh, buffer, buffer_size, &done) == MPG123_OK)
- {
- // Shift from unsigned to signed!
- for (auto i = 0; i < buffer_size / 2; i++){workAround[i] = static_cast<char>(buffer[i]);}
- // This was the original ao system
- //ao_play(dev, buffer, done);
- ao_play(dev, workAround, done);
- }
- cout << md5(workAround) << " " << sizeof(workAround) << endl;
- cout << "Buffer size " << buffer_size << endl;
- cout << "Done size " << done << endl;
- cout << "Channels " << channels << endl;
- cout << "Encoding " << encoding << endl;
- cout << "Rate " << rate << endl;
- /* clean up */
- free(buffer);
- ao_close(dev);
- mpg123_close(mh);
- mpg123_delete(mh);
- mpg123_exit();
- ao_shutdown();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment