GameDev.ru
/ GameDev.ru / Пользователи / Andrey / Сообщения на форуме пользователя Andrey (190 стр.)

Сообщения на форуме пользователя Andrey (190 стр.)

DirectShow: Проигрывание mp3, ну как поменять громкость музыки????2 мар. 200621:04#7
achumack
Спасибо заработало!!!!!!!!
DirectShow: Проигрывание mp3, ну как поменять громкость музыки????2 мар. 200619:28#5
?
ну как никто не может ничего сказать?
А то сейчас буду OpenAL внедрять...
DirectShow: Проигрывание mp3, ну как поменять громкость музыки????2 мар. 200617:48#4
Antonz
Усе получил интерфейс...
только вот как теперь его использовать?
я вот попробовал установку громкости Прямо в метод проигрывания, но не работает:
#define DSVOLUME_TO_B(volume) static_cast<DWORD>(- 20 * (100 - volume))

HRESULT Mp3Player::Play(PCWCH wFileName)
{
    HRESULT hr = S_OK;
    IPin *pPin = NULL;
	IBasicAudio *audio = NULL;
	hr = g_pGraphBuilder -> QueryInterface(IID_IBasicAudio, reinterpret_cast<void **>(&audio));
	if (!hr && audio) {
		hr = audio -> put_Volume(DSVOLUME_TO_B((App.soundVolume - 440) * 100 / 250));
		Log::write("Set Volume: ");
		Log::write(DXGetErrorString9(hr));
	}
	else {
		Log::write("QueryInterface IBasicAudio: ");
		Log::write(DXGetErrorString9(hr));
	}
...
}
вот что пишет утилита DirectX Error Lookup:

HRESULT: 0x80004001 (2147500033)
Name: E_NOTIMPL
Description: The function called is not supported at this time
Severity code: Failed
Facility Code: FACILITY_NULL (0)
Error Code: 0x4001 (16385)

Что не так? может громкость отдельно выставлять?

Правка: 2 мар. 2006 17:49

DirectShow: Проигрывание mp3, ну как поменять громкость музыки????2 мар. 200617:21#3
Antonz
>То есть драть его прямо от Граф Билдера и пробовать громкость менять. Если не поможет, то уже наверное через >системный микшер, то есть вообще без DirectShow. :-/
хм а не подскажешь как это интерфейс заполучить?
Регистрация метода в lua2 мар. 200617:08#2
ochelot
а ты попробуй объявить эту функцию в классе как static:
class main_win:public wxFrame
{
...
static int  l_add_item_kadr( lua_State *l);  // экспортировать в скрипт
....
};
только вот с данными в классе придеться что-то делать static функция не может к ним обратиться т.к. не имее указателя this...
если такой геморой не нравиться то испольхую luabind
Перспектива OpenGL2 мар. 200616:15#76
очегь хорошая темка...
OpenGL будет жить это точно.
DirectShow: Проигрывание mp3, ну как поменять громкость музыки????2 мар. 200615:50#1
Реализация:
Mp3Player::~Mp3Player()
{
    if(g_pMediaControl)
        g_pMediaControl->Stop();
    SAFE_RELEASE(g_pSourceNext);
    SAFE_RELEASE(g_pSourceCurrent);
    SAFE_RELEASE(g_pMediaSeeking);
    SAFE_RELEASE(g_pMediaControl);
    SAFE_RELEASE(g_pGraphBuilder);
    // Clean up COM
    CoUninitialize();
    return;
}
HRESULT Mp3Player::GraphInit()
{
   HRESULT hr;
	if ( FAILED(hr = CoInitialize(NULL)) )
		  return hr;
    // Create DirectShow Graph
    if(FAILED(hr = CoCreateInstance(CLSID_FilterGraph, NULL,
        CLSCTX_INPROC, IID_IGraphBuilder,
        reinterpret_cast<void **>(&g_pGraphBuilder))))
        return hr;
    // Get the IMediaControl Interface
    if(FAILED(hr = g_pGraphBuilder->QueryInterface(IID_IMediaControl,
        reinterpret_cast<void **>(&g_pMediaControl))))
        return hr;
    // Get the IMediaControl Interface
    if(FAILED(hr = g_pGraphBuilder->QueryInterface(IID_IMediaSeeking,
        reinterpret_cast<void **>(&g_pMediaSeeking))))
        return hr;
   return S_OK;
}
HRESULT Mp3Player::Play(PCWCH wFileName)
{
    HRESULT hr = S_OK;
    IPin *pPin = NULL;
    //WCHAR wFileName[MAX_PATH] = L"test.mp3";
	//StrDup(wFileName, file_name.c_str() );
    // OPTIMIZATION OPPORTUNITY
    // This will open the file, which is expensive. To optimize, this
    // should be done earlier, ideally as soon as we knew this was the
    // next file to ensure that the file load doesn't add to the
    // filter swapping time & cause a hiccup.
    //
    // Add the new source filter to the graph. (Graph can still be running)
    hr = g_pGraphBuilder->AddSourceFilter(wFileName, wFileName, &g_pSourceNext);
    // Get the first output pin of the new source filter. Audio sources
    // typically have only one output pin, so for most audio cases finding
    // any output pin is sufficient.
    if(SUCCEEDED(hr))
        hr = g_pSourceNext->FindPin(L"Output", &pPin);
	else
		Log::write("File not found");
    // Stop the graph
    if(SUCCEEDED(hr))
        hr = g_pMediaControl->Stop();
    // Break all connections on the filters. You can do this by adding
    // and removing each filter in the graph
    if(SUCCEEDED(hr))  {
        IEnumFilters *pFilterEnum = NULL;
        if(SUCCEEDED(hr = g_pGraphBuilder->EnumFilters(&pFilterEnum)))    {
            int iFiltCount = 0;
            int iPos = 0;
            // Need to know how many filters. If we add/remove filters during the
            // enumeration we'll invalidate the enumerator
            while(S_OK == pFilterEnum->Skip(1))
                iFiltCount++;
            // Allocate space, then pull out all of the
            IBaseFilter **ppFilters = reinterpret_cast<IBaseFilter **>
                                      (_alloca(sizeof(IBaseFilter *) * iFiltCount));
            pFilterEnum->Reset();
            while(S_OK == pFilterEnum->Next(1, &(ppFilters[iPos++]), NULL));
            SAFE_RELEASE(pFilterEnum);
            for(iPos = 0; iPos < iFiltCount; iPos++)      {
                g_pGraphBuilder->RemoveFilter(ppFilters[iPos]);
                // Put the filter back, unless it is the old source
                if(ppFilters[iPos] != g_pSourceCurrent)
                    g_pGraphBuilder->AddFilter(ppFilters[iPos], NULL);
                SAFE_RELEASE(ppFilters[iPos]);
            }
        }
    }
    // We have the new output pin. Render it
    if(SUCCEEDED(hr))   {
        // Release the old source filter, if it exists
        SAFE_RELEASE(g_pSourceCurrent)
        hr = g_pGraphBuilder->Render(pPin);
        g_pSourceCurrent = g_pSourceNext;
        g_pSourceNext = NULL;
    }
    SAFE_RELEASE(pPin);
    SAFE_RELEASE(g_pSourceNext); // In case of errors
    // Re-seek the graph to the beginning
    if(SUCCEEDED(hr))   {
        LONGLONG llPos = 0;
        hr = g_pMediaSeeking->SetPositions(&llPos, AM_SEEKING_AbsolutePositioning,
                                           &llPos, AM_SEEKING_NoPositioning);
    }
    // Start the graph
    if(SUCCEEDED(hr))
        hr = g_pMediaControl->Run();
    return S_OK;
}
void Mp3Player::Stop()
{
	g_pMediaControl->Stop();
}
void Mp3Player::RePlay()
{
    HRESULT hr = S_OK;
    if(SUCCEEDED(hr))   {
        LONGLONG llPos = 0;
        hr = g_pMediaSeeking->SetPositions(&llPos, AM_SEEKING_AbsolutePositioning,
                                           &llPos, AM_SEEKING_NoPositioning);
    }
    // Start the graph
    if(SUCCEEDED(hr))
        hr = g_pMediaControl->Run();
}
Спасибо всем заранее.
С Уважением Андрей.

Правка: 2 мар. 2006 15:51

DirectShow: Проигрывание mp3, ну как поменять громкость музыки????2 мар. 200615:50#0
Привет всем!!!
В проекте проигрывается музыка в формате mp3. С  использованием DirectShow.
В настройках игры громкость музыки нужно менять. Как это реализовать? облазил все классы ничего подобного не встречал :(
вот готовый проигрыватель Mp3:
class Mp3Player   {
public:
	Mp3Player();
	virtual ~Mp3Player();
	HRESULT GraphInit();
	HRESULT Play(PCWCH);
	void Stop();
	void RePlay();
private:
	IGraphBuilder *g_pGraphBuilder;
	IMediaControl *g_pMediaControl;
	IMediaSeeking *g_pMediaSeeking;
	IBaseFilter   *g_pSourceCurrent;
	IBaseFilter   *g_pSourceNext;
};
подтасовка файлов в Си2 мар. 200615:27#5
crax
я думаю setvbuf тебе подойдет лучше всего прекрасно работает.
Direct3D: Артефакты при рендеринге.2 мар. 200615:13#7
StingerX
все понятно спасибо буду пробовать...
Отслеживалие столкновений с объектами.2 мар. 200612:02#8
Kavis
ну если сложность высокая то будешь ты изобретать велосипед не 1 год и что с него получиться незвестно...
Direct3D: Артефакты при рендеринге.2 мар. 200611:48#5
StingerX
>В фотошопе нужно более качественно почистить текстуру так, чтобы альфа была равномерная, тогда артифакты исчезнут.
короче я так понял что фотошоп глюченно сохранил?
Отслеживалие столкновений с объектами.2 мар. 200611:34#6
0r@ngE
>ЗЫ. ТОМАКАКА - полный аЦЦтой
а поподробнее можно? просто я начал с него говорят исправлены ошибки в новой версии, да и скорость хорошоя говорят Newton медленнее.
Direct3D: Артефакты при рендеринге.1 мар. 200621:37#3
oistalker
>Сохраняй в png и не будет никаких артефактов.
формат нам менять нельзя...
Careless Angel
>D3DXCreateTextureFromFileEX с указанием реальных размеров картинок не помогает ???
не помогает пробовали.
All
еще варианты?
Direct3D: Артефакты при рендеринге.1 мар. 200619:43#0
Привет всем!!
При рендеринге текстур наблюдаются странные артефакты по краям.
Если сохранять в Photoshop'е то артефакты есть, при сохранении в 3DS Max'е их нет.
Код загрузки стандартный D3DXCreateTextureFromFile/D3DXCreateTextureFromFileInMemory.
На скриншоте видна текстура без артефакта(если смотреть InFanView) и с артефактом(если смотреть в проводнике windows)
Изображение удалено
Если не будет видно, то увеличьте изображение.
Спасибо всем заранее.
С Уважением Андрей.

Правка: 1 мар. 2006 19:45

Следующие темы >>

2001—2012 © GameDev.ru — Разработка игр