| 832 | } |
| 833 | |
| 834 | bool ResourcePool::LoadMusic(const char* name, const std::wstring& path, double start, double end)LNOEXCEPT |
| 835 | { |
| 836 | LDEBUG_RESOURCETIMER; |
| 837 | |
| 838 | { |
| 839 | LDEBUG_RESOURCESCOPE; |
| 840 | |
| 841 | LASSERT(LAPP.GetSoundSys()); |
| 842 | |
| 843 | fcyRefPointer<fcyMemStream> tDataBuf; |
| 844 | if (!m_pMgr->LoadFile(path.c_str(), tDataBuf)) |
| 845 | return false; |
| 846 | |
| 847 | try |
| 848 | { |
| 849 | fcyRefPointer<f2dSoundDecoder> tDecoder; |
| 850 | if (FCYFAILED(LAPP.GetSoundSys()->CreateOGGVorbisDecoder(tDataBuf, &tDecoder))) |
| 851 | { |
| 852 | tDataBuf->SetPosition(FCYSEEKORIGIN_BEG, 0); |
| 853 | if (FCYFAILED(LAPP.GetSoundSys()->CreateWaveDecoder(tDataBuf, &tDecoder))) |
| 854 | { |
| 855 | LERROR("LoadMusic: �������ļ�'%s'", path.c_str()); |
| 856 | return false; |
| 857 | } |
| 858 | } |
| 859 | |
| 860 | fcyRefPointer<ResMusic::BGMWrapper> tWrapperedBuffer; |
| 861 | tWrapperedBuffer.DirectSet(new ResMusic::BGMWrapper(tDecoder, start, end)); |
| 862 | |
| 863 | fcyRefPointer<f2dSoundBuffer> tBuffer; |
| 864 | if (FCYFAILED(LAPP.GetSoundSys()->CreateDynamicBuffer(tWrapperedBuffer, LSOUNDGLOBALFOCUS, &tBuffer))) |
| 865 | { |
| 866 | LERROR("LoadMusic: ��������Ƶ���������ļ�'%s' (f2dSoundSys::CreateDynamicBuffer failed.)", path.c_str()); |
| 867 | return false; |
| 868 | } |
| 869 | |
| 870 | fcyRefPointer<ResMusic> tRes; |
| 871 | tRes.DirectSet(new ResMusic(name, tBuffer)); |
| 872 | m_MusicPool.emplace(name, tRes); |
| 873 | } |
| 874 | catch (const fcyException& e) |
| 875 | { |
| 876 | LERROR("LoadMusic: �����ļ�'%s'����Ƶ����ʱ��������ʽ��֧�֣� (�쳣��Ϣ'%m' Դ'%m')", path.c_str(), e.GetDesc(), e.GetSrc()); |
| 877 | return false; |
| 878 | } |
| 879 | catch (const bad_alloc&) |
| 880 | { |
| 881 | LERROR("LoadMusic: �ڴ治��"); |
| 882 | return false; |
| 883 | } |
| 884 | |
| 885 | #ifdef LSHOWRESLOADINFO |
| 886 | LINFO("LoadMusic: BGM'%m'��װ�� (%s)", name, getResourcePoolTypeName()); |
| 887 | #endif |
| 888 | } |
| 889 | |
| 890 | LDEBUG_RESOURCEHINT(ResourceType::Music, path.c_str()); |
| 891 | return true; |
nothing calls this directly
no test coverage detected