0

我现在正在寻找几个小时,我希望你能帮助我。

我正在编写一个音乐播放器,它通过 ifstream 将 *.wav 文件读取到缓冲区,然后我通过 sndPlaysound() 播放声音。那行得通,但现在我想暂停播放的歌曲,然后再继续,我想知道是否有人有任何建议我可以跳到例如 wav 文件中的 10 秒,这样我就不会再从头开始了。

这是我到目前为止所做的事情的代码:

#pragma comment(lib,"winmm.lib")
#include <windows.h>
#include <iostream>
#include <fstream>

Wave::Wave(char * filename)
{
    buffer = 0;

    std::ifstream infile(filename, std::ios::binary);

    /*here is some irrelevant code I omitted*/

    infile.seekg(0, std::ios::end);  //move to end
    int length = infile.tellg();   //
    buffer = new char[length];    //allocate memory
    infile.seekg(0, std::ios::beg);   //move to start
    infile.read(buffer, length); //save in buffer

    totalTime = (length - 44) / bytesPerSec; //total time of *.wav

    infile.close();
}

void Wave::play(bool async)
{
    if (async)
        sndPlaySound((LPCTSTR)buffer,  SND_MEMORY | SND_ASYNC);
    else
        sndPlaySound((LPCTSTR)buffer,  SND_MEMORY);
}

我正在寻找如何制作这样的方法的任何想法

Wave::play(bool async, int x)
{
     /*start playing *.wav at x seconds*/
}

感谢您的每一个答案或想法

4

0 回答 0