static unsigned char volToChar(double vol) { double d=(DB2SLIDER(VAL2DB(vol))*127.0/1000.0); if (d<0.0)d=0.0; else if (d>127.0)d=127.0; return (unsigned char)(d+0.5); }
static int volToInt14(double vol) { double d=(DB2SLIDER(VAL2DB(vol))*16383.0/1000.0); if (d<0.0)d=0.0; else if (d>16383.0)d=16383.0; return (int)(d+0.5); }
void NudgeMasterOutputVol(COMMAND_T* ct) { MediaTrack* tr = CSurf_TrackFromID(0, false); int iOutput = abs((int)ct->user) >> 8; double *pVol = (double*)GetSetTrackSendInfo(tr, 1, iOutput, "D_VOL", NULL); if (pVol) { double dVol = DB2VAL(VAL2DB(*pVol) + (abs((int)ct->user) & 0xFF) * (ct->user >= 0 ? 1 : -1)); GetSetTrackSendInfo(tr, 1, iOutput, "D_VOL", &dVol); TrackList_AdjustWindows(false); Undo_OnStateChangeEx(SWS_CMD_SHORTNAME(ct), UNDO_STATE_TRACKCFG, 0); } }
void DoAnalyzeItem(COMMAND_T*) { WDL_TypedBuf<MediaItem*> items; SWS_GetSelectedMediaItems(&items); bool bDidWork = false; for (int i = 0; i < items.GetSize(); i++) { MediaItem* mi = items.Get()[i]; int iChannels = ((PCM_source*)mi)->GetNumChannels(); if (iChannels) { bDidWork = true; ANALYZE_PCM a; memset(&a, 0, sizeof(a)); a.iChannels = iChannels; a.dPeakVals = new double[iChannels]; a.dRMSs = new double[iChannels]; if (AnalyzeItem(mi, &a)) { WDL_String str; str.Set(__LOCALIZE("Peak level:","sws_analysis")); for (int i = 0; i < iChannels; i++) { str.Append(" "); str.AppendFormatted(50, __LOCALIZE_VERFMT("Channel %d = %.2f dB","sws_analysis"), i+1, VAL2DB(a.dPeakVals[i])); } str.Append("\n"); str.Append(__LOCALIZE("RMS level:","sws_analysis")); for (int i = 0; i < iChannels; i++) { str.Append(" "); str.AppendFormatted(50, __LOCALIZE_VERFMT("Channel %d = %.2f dB","sws_analysis"), i+1, VAL2DB(a.dRMSs[i])); } MessageBox(g_hwndParent, str.Get(), __LOCALIZE("Item analysis","sws_analysis"), MB_OK); } delete [] a.dPeakVals; delete [] a.dRMSs; } } if (!bDidWork) { MessageBox(NULL, __LOCALIZE("No items selected to analyze.","sws_analysis"), __LOCALIZE("SWS - Error","sws_analysis"), MB_OK); return; } }
static BOOL WINAPI RemoteChannelItemProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { int m_userch=GetWindowLong(hwndDlg,GWL_USERDATA); // high 16 bits, user, low 16 bits, channel switch (uMsg) { case WM_INITDIALOG: SetWindowLong(hwndDlg,GWL_USERDATA,0x0fffffff); SendDlgItemMessage(hwndDlg,IDC_VU,PBM_SETRANGE,0,MAKELPARAM(0,100)); SendDlgItemMessage(hwndDlg,IDC_VOL,TBM_SETRANGE,FALSE,MAKELONG(0,100)); SendDlgItemMessage(hwndDlg,IDC_VOL,TBM_SETTIC,FALSE,63); SendDlgItemMessage(hwndDlg,IDC_PAN,TBM_SETRANGE,FALSE,MAKELONG(0,100)); SendDlgItemMessage(hwndDlg,IDC_PAN,TBM_SETTIC,FALSE,50); return 0; case WM_RCUSER_UPDATE: m_userch=((int)LOWORD(wParam) << 16) | LOWORD(lParam); SetWindowLong(hwndDlg,GWL_USERDATA,m_userch); break; } int user=m_userch>>16; int chan=m_userch&0xffff; switch (uMsg) { case WM_RCUSER_UPDATE: // update the items { g_client_mutex.Enter(); char *un=g_client->GetUserState(user,NULL,NULL,NULL); SetDlgItemText(hwndDlg,IDC_USERNAME,un?un:""); bool sub=0,m=0,s=0; float v=0,p=0; char *cn=g_client->GetUserChannelState(user,chan,&sub,&v,&p,&m,&s); g_client_mutex.Leave(); SetDlgItemText(hwndDlg,IDC_CHANNELNAME,cn?cn:""); CheckDlgButton(hwndDlg,IDC_RECV,sub?BST_CHECKED:0); CheckDlgButton(hwndDlg,IDC_MUTE,m?BST_CHECKED:0); CheckDlgButton(hwndDlg,IDC_SOLO,s?BST_CHECKED:0); SendDlgItemMessage(hwndDlg,IDC_VOL,TBM_SETPOS,TRUE,(LPARAM)DB2SLIDER(VAL2DB(v))); int t=(int)(p*50.0) + 50; if (t < 0) t=0; else if (t > 100)t=100; SendDlgItemMessage(hwndDlg,IDC_PAN,TBM_SETPOS,TRUE,t); { char tmp[512]; mkvolstr(tmp,v); SetDlgItemText(hwndDlg,IDC_VOLLBL,tmp); mkpanstr(tmp,p); SetDlgItemText(hwndDlg,IDC_PANLBL,tmp); } } break; case WM_LCUSER_VUUPDATE: { double val=VAL2DB(g_client->GetUserChannelPeak(user,chan)); int ival=(int)((val+100.0)); if (ival < 0) ival=0; else if (ival > 100) ival=100; SendDlgItemMessage(hwndDlg,IDC_VU,PBM_SETPOS,ival,0); char buf[128]; sprintf(buf,"%s%.2f dB",val>0.0?"+":"",val); SetDlgItemText(hwndDlg,IDC_VULBL,buf); } return 0; case WM_HSCROLL: { double pos=(double)SendMessage((HWND)lParam,TBM_GETPOS,0,0); g_client_mutex.Enter(); if ((HWND) lParam == GetDlgItem(hwndDlg,IDC_VOL)) { pos=SLIDER2DB(pos); if (fabs(pos- -6.0) < 0.5) pos=-6.0; else if (pos < -115.0) pos=-1000.0; pos=DB2VAL(pos); g_client->SetUserChannelState(user,chan,false,false,true,(float)pos,false,0.0,false,false,false,false); char tmp[512]; mkvolstr(tmp,pos); SetDlgItemText(hwndDlg,IDC_VOLLBL,tmp); } else if ((HWND) lParam == GetDlgItem(hwndDlg,IDC_PAN)) { pos=(pos-50.0)/50.0; if (fabs(pos) < 0.08) pos=0.0; g_client->SetUserChannelState(user,chan,false,false,false,0.0,true,(float)pos,false,false,false,false); char tmp[512]; mkpanstr(tmp,pos); SetDlgItemText(hwndDlg,IDC_PANLBL,tmp); } g_client_mutex.Leave(); } return 0; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_RECV: g_client_mutex.Enter(); g_client->SetUserChannelState(user,chan,true,!!IsDlgButtonChecked(hwndDlg,LOWORD(wParam)),false,0.0,false,0.0,false,false,false,false); g_client_mutex.Leave(); break; case IDC_SOLO: g_client_mutex.Enter(); g_client->SetUserChannelState(user,chan,false,false,false,0.0,false,0.0,false,false,true,!!IsDlgButtonChecked(hwndDlg,LOWORD(wParam))); g_client_mutex.Leave(); break; case IDC_MUTE: g_client_mutex.Enter(); g_client->SetUserChannelState(user,chan,false,false,false,0.0,false,0.0,true,!!IsDlgButtonChecked(hwndDlg,LOWORD(wParam)),false,false); g_client_mutex.Leave(); break; case IDC_VOLLBL: if (HIWORD(wParam) == STN_DBLCLK) { double vol = 1.0; g_client_mutex.Enter(); g_client->SetUserChannelState(user,chan,false,false,true,(float)vol,false,0.0,false,false,false,false); g_client_mutex.Leave(); SendDlgItemMessage(hwndDlg,IDC_VOL,TBM_SETPOS,TRUE,(LPARAM)DB2SLIDER(VAL2DB(vol))); char tmp[512]; mkvolstr(tmp,vol); SetDlgItemText(hwndDlg,IDC_VOLLBL,tmp); } break; case IDC_PANLBL: if (HIWORD(wParam) == STN_DBLCLK) { double pan = 0.0; int t=(int)(pan*50.0) + 50; if (t < 0) t=0; else if (t > 100)t=100; g_client_mutex.Enter(); g_client->SetUserChannelState(user,chan,false,false,false,0.0,true,(float)pan,false,false,false,false); g_client_mutex.Leave(); SendDlgItemMessage(hwndDlg,IDC_PAN,TBM_SETPOS,TRUE,t); char tmp[512]; mkpanstr(tmp,pan); SetDlgItemText(hwndDlg,IDC_PANLBL,tmp); } break; } return 0; } return 0; }
void mkvolstr(char *str, double vol) { double v=VAL2DB(vol); if (vol < 0.0000001 || v < -120.0) v=-120.0; sprintf(str,"%s%2.1fdB",v>0.0?"+":"",v); }