diff --git a/MusicPlayer2/DataSettingsDlg.cpp b/MusicPlayer2/DataSettingsDlg.cpp index 04580926..9419fd05 100644 --- a/MusicPlayer2/DataSettingsDlg.cpp +++ b/MusicPlayer2/DataSettingsDlg.cpp @@ -24,6 +24,7 @@ CDataSettingsDlg::~CDataSettingsDlg() void CDataSettingsDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); + DDX_Control(pDX, IDC_SF2_PATH_EDIT, m_sf2_path_edit); } @@ -36,6 +37,7 @@ BEGIN_MESSAGE_MAP(CDataSettingsDlg, CDialogEx) ON_BN_CLICKED(IDC_BROWSE_BUTTON, &CDataSettingsDlg::OnBnClickedBrowseButton) ON_BN_CLICKED(IDC_MIDI_USE_INNER_LYRIC_CHECK, &CDataSettingsDlg::OnBnClickedMidiUseInnerLyricCheck) ON_BN_CLICKED(IDC_DOWNLOAD_WHEN_TAG_FULL_CHECK, &CDataSettingsDlg::OnBnClickedDownloadWhenTagFullCheck) + ON_EN_CHANGE(IDC_SF2_PATH_EDIT, &CDataSettingsDlg::OnEnChangeSf2PathEdit) END_MESSAGE_MAP() @@ -68,6 +70,7 @@ BOOL CDataSettingsDlg::OnInitDialog() m_toolTip.AddTool(GetDlgItem(IDC_MIDI_USE_INNER_LYRIC_CHECK), _T("有些 MIDI 音乐包含歌词,勾选此项后,会优先显示 MIDI 音乐内嵌的歌词。")); GetDlgItem(IDC_BROWSE_BUTTON)->EnableWindow(theApp.m_format_convert_dialog_exit); //正在进行格式转换时不允许更改音色库 + m_sf2_path_edit.EnableWindow(theApp.m_format_convert_dialog_exit); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE @@ -199,3 +202,20 @@ void CDataSettingsDlg::OnBnClickedDownloadWhenTagFullCheck() // TODO: 在此添加控件通知处理程序代码 m_data.auto_download_only_tag_full = (((CButton*)GetDlgItem(IDC_DOWNLOAD_WHEN_TAG_FULL_CHECK))->GetCheck() != 0); } + + +void CDataSettingsDlg::OnEnChangeSf2PathEdit() +{ + // TODO: 如果该控件是 RICHEDIT 控件,它将不 + // 发送此通知,除非重写 CDialogEx::OnInitDialog() + // 函数并调用 CRichEditCtrl().SetEventMask(), + // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 + if (m_sf2_path_edit.GetModify()) + { + CString str; + m_sf2_path_edit.GetWindowText(str); + m_data.sf2_path = str; + } + + // TODO: 在此添加控件通知处理程序代码 +} diff --git a/MusicPlayer2/DataSettingsDlg.h b/MusicPlayer2/DataSettingsDlg.h index bffc172b..0b99e007 100644 --- a/MusicPlayer2/DataSettingsDlg.h +++ b/MusicPlayer2/DataSettingsDlg.h @@ -21,6 +21,7 @@ public: private: size_t m_data_size; //数据文件的大小 CToolTipCtrl m_toolTip; + CEdit m_sf2_path_edit; void ShowDataSizeInfo(); @@ -39,4 +40,5 @@ public: virtual BOOL PreTranslateMessage(MSG* pMsg); afx_msg void OnBnClickedMidiUseInnerLyricCheck(); afx_msg void OnBnClickedDownloadWhenTagFullCheck(); + afx_msg void OnEnChangeSf2PathEdit(); }; diff --git a/MusicPlayer2/MusicPlayer2.rc b/MusicPlayer2/MusicPlayer2.rc index 8c24762b..97639b2b 100644 Binary files a/MusicPlayer2/MusicPlayer2.rc and b/MusicPlayer2/MusicPlayer2.rc differ diff --git a/MusicPlayer2/MusicPlayerDlg.cpp b/MusicPlayer2/MusicPlayerDlg.cpp index 7a5c7b53..30d42c39 100644 --- a/MusicPlayer2/MusicPlayerDlg.cpp +++ b/MusicPlayer2/MusicPlayerDlg.cpp @@ -356,7 +356,7 @@ void CMusicPlayerDlg::LoadConfig() theApp.m_general_setting_data.auto_download_lyric = ini.GetBool(_T("general"), _T("auto_download_lyric"), 1); theApp.m_general_setting_data.auto_download_album_cover = ini.GetBool(_T("general"), _T("auto_download_album_cover"), 1); theApp.m_general_setting_data.auto_download_only_tag_full = ini.GetBool(_T("general"), _T("auto_download_only_tag_full"), 1); - theApp.m_general_setting_data.sf2_path = ini.GetString(L"general", L"sf2_path", L"%localdir%\\Plugins\\soundfont\\TimGM6mb.sf2"); + theApp.m_general_setting_data.sf2_path = ini.GetString(L"general", L"sf2_path", L""); theApp.m_general_setting_data.midi_use_inner_lyric = ini.GetBool(_T("general"), _T("midi_use_inner_lyric"), 0); } diff --git a/MusicPlayer2/Player.cpp b/MusicPlayer2/Player.cpp index f8b4b81f..198ffc3e 100644 --- a/MusicPlayer2/Player.cpp +++ b/MusicPlayer2/Player.cpp @@ -88,15 +88,21 @@ void CPlayer::IniBASS() m_sfont_name = L"<无>"; if (m_bass_midi_lib.IsSuccessed()) { - CString sf2_path = theApp.m_general_setting_data.sf2_path.c_str(); - sf2_path.Replace(L"%localdir%\\", theApp.m_local_dir.c_str()); - if (CCommon::FileExist(wstring(sf2_path))) + wstring sf2_path = theApp.m_general_setting_data.sf2_path; + if (!CCommon::FileExist(sf2_path)) //如果设置的音色库路径不存在,则从.\Plugins\soundfont\目录下查找音色库文件 { - m_sfont.font = m_bass_midi_lib.BASS_MIDI_FontInit(sf2_path, BASS_UNICODE); + vector sf2s; + CCommon::GetFiles(plugin_dir + L"soundfont\\*.sf2", sf2s); + if (!sf2s.empty()) + sf2_path = plugin_dir + L"soundfont\\" + sf2s[0]; + } + if (CCommon::FileExist(sf2_path)) + { + m_sfont.font = m_bass_midi_lib.BASS_MIDI_FontInit(sf2_path.c_str(), BASS_UNICODE); if (m_sfont.font == 0) { CString info; - info.Format(_T("音色库“%s”加载失败!"), sf2_path.GetString()); + info.Format(_T("音色库“%s”加载失败!"), sf2_path.c_str()); CCommon::WriteLog((theApp.m_module_dir + L"error.log").c_str(), info.GetString()); m_sfont_name = L"<加载失败>"; }