BASS_INFO * bmx_bass_getinfo() { BASS_INFO * info = new BASS_INFO; BOOL success = BASS_GetInfo(info); if (!success) { delete info; return 0; } return info; }
static BOOL Initialize() { BASS_INFO bi; // initialize output, get latency if (!BASS_Init(-1,44100,BASS_DEVICE_LATENCY,win,NULL)) { Error("Can't initialize output"); return FALSE; } BASS_GetInfo(&bi); if (bi.dsver<8) { // no DX8, so disable effect buttons EnableWindow(GetDlgItem(win,20),FALSE); EnableWindow(GetDlgItem(win,21),FALSE); EnableWindow(GetDlgItem(win,22),FALSE); EnableWindow(GetDlgItem(win,23),FALSE); } // create a stream to play the recording chan=BASS_StreamCreate(44100,2,0,STREAMPROC_PUSH,0); // start recording with 10ms period if (!BASS_RecordInit(-1) || !(rchan=BASS_RecordStart(44100,2,MAKELONG(0,10),RecordingCallback,0))) { BASS_RecordFree(); BASS_Free(); Error("Can't initialize recording"); return FALSE; } { // get list of inputs int c; const char *i; for (c=0;i=BASS_RecordGetInputName(c);c++) { float level; MESS(10,CB_ADDSTRING,0,i); if (!(BASS_RecordGetInput(c,&level)&BASS_INPUT_OFF)) { // this 1 is currently "on" input=c; MESS(10,CB_SETCURSEL,input,0); MESS(11,TBM_SETPOS,TRUE,level*100); // set level slider } } } { // prebuffer at least "minbuf" amount of data before starting playback DWORD prebuf=BASS_ChannelSeconds2Bytes(chan,bi.minbuf/1000.f); while (BASS_ChannelGetData(chan,NULL,BASS_DATA_AVAILABLE)<prebuf) Sleep(1); } BASS_ChannelPlay(chan,FALSE); return TRUE; }
CPlayer() { //return; // multi thread crash m_this = this; ZeroMemory(fx, sizeof(fx)); ZeroMemory(vol, sizeof(vol)); ZeroMemory(pos, sizeof(pos)); m_fPosition = 0.0f; m_fTempo = 120.0f; m_bPlaying = false; m_fFreqMultiply = 1.0f; m_fFreqMultiplyStep = 0.0f; // check the correct BASS was loaded if (HIWORD(BASS_GetVersion())!=BASSVERSION) { printf("An incorrect version of BASS.DLL was loaded"); return; } BASS_SetConfig(BASS_CONFIG_VISTA_TRUEPOS,0); // allows lower latency on Vista and newer BASS_SetConfig(BASS_CONFIG_UPDATEPERIOD,10); // 10ms update period // initialize default output device (and measure latency) if (!BASS_Init(-1,44100,BASS_DEVICE_LATENCY,0,NULL)) { printf("Can't initialize device"); return; } BASS_GetInfo(&info); BASS_SetConfig(BASS_CONFIG_BUFFER,10+info.minbuf+1); // default buffer size = update period + 'minbuf' + 1ms extra margin buflen=BASS_GetConfig(BASS_CONFIG_BUFFER); if (!info.freq) info.freq=44100; // if the device's output rate is unknown default to 44100 Hz stream=BASS_StreamCreate(info.freq,2,0,(STREAMPROC*)CPlayer::_WriteStream,0); // create a stream (stereo for effects) BASS_ChannelPlay(stream,FALSE); // start it //BASS_ChannelSetFX(stream, BASS_FX_DX8_CHORUS, 0); // }
int main(int argc, char* argv[]) { gtk_init(&argc,&argv); // check the correct BASS was loaded if (HIWORD(BASS_GetVersion())!=BASSVERSION) { Error("An incorrect version of BASS was loaded"); return 0; } // initialize default output device if (!BASS_Init(-1,44100,0,NULL,NULL)) { Error("Can't initialize device"); return 0; } // initialize GUI glade=glade_xml_new(GLADE_PATH"synth.glade",NULL,NULL); if (!glade) return 0; win=GetWidget("window1"); if (!win) return 0; glade_xml_signal_autoconnect(glade); BASS_GetInfo(&info); stream=BASS_StreamCreate(info.freq,2,BASS_SAMPLE_FLOAT,(STREAMPROC*)WriteStream,0); // create a stream (stereo for effects) BASS_ChannelSetAttribute(stream,BASS_ATTRIB_NOBUFFER,1); // no buffering for minimum latency BASS_ChannelPlay(stream,FALSE); // start it g_signal_connect(win,"key-press-event",G_CALLBACK(KeyHandler),NULL); g_signal_connect(win,"key-release-event",G_CALLBACK(KeyHandler),NULL); gtk_main(); BASS_Free(); return 0; }
int main(int argc, char* argv[]) { regex_t fregex; gtk_init(&argc,&argv); // check the correct BASS was loaded if (HIWORD(BASS_GetVersion())!=BASSVERSION) { Error("An incorrect version of BASS was loaded"); return 0; } // initialize default device if (!BASS_Init(-1,44100,0,NULL,NULL)) { Error("Can't initialize device"); return 0; } // initialize GUI glade=glade_xml_new(GLADE_PATH"speakers.glade",NULL,NULL); if (!glade) return 0; win=GetWidget("window1"); if (!win) return 0; glade_xml_signal_autoconnect(glade); { // check how many speakers the device supports BASS_INFO i; BASS_GetInfo(&i); if (i.speakers<8) { gtk_widget_set_sensitive(GetWidget("open4"),FALSE); gtk_widget_set_sensitive(GetWidget("swap3"),FALSE); } if (i.speakers<6) { gtk_widget_set_sensitive(GetWidget("open3"),FALSE); gtk_widget_set_sensitive(GetWidget("swap2"),FALSE); } if (i.speakers<4) { gtk_widget_set_sensitive(GetWidget("open2"),FALSE); gtk_widget_set_sensitive(GetWidget("swap1"),FALSE); } } { // initialize file selector GtkFileFilter *filter; filesel=gtk_file_chooser_dialog_new("Open File",GTK_WINDOW(win),GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,GTK_STOCK_OPEN,GTK_RESPONSE_ACCEPT,NULL); filter=gtk_file_filter_new(); gtk_file_filter_set_name(filter,"Playable files"); regcomp(&fregex,"\\.(mo3|xm|mod|s3m|it|umx|mp[1-3]|ogg|wav|aif)$",REG_ICASE|REG_NOSUB|REG_EXTENDED); gtk_file_filter_add_custom(filter,GTK_FILE_FILTER_FILENAME,FileExtensionFilter,&fregex,NULL); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(filesel),filter); filter=gtk_file_filter_new(); gtk_file_filter_set_name(filter,"All files"); gtk_file_filter_add_pattern(filter,"*"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(filesel),filter); } gtk_widget_show(win); gtk_main(); gtk_widget_destroy(filesel); regfree(&fregex); BASS_Free(); return 0; }
void __cdecl main(int argc, char **argv) { HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); int running = 1; #ifdef WIN32 if (IsDebuggerPresent()) { // turn on floating-point exceptions unsigned int prev; _clearfp(); _controlfp_s(&prev, 0, _EM_ZERODIVIDE|_EM_INVALID); } #endif // check the correct BASS was loaded if (HIWORD(BASS_GetVersion()) != BASSVERSION) { fprintf(stderr, "An incorrect version of BASS.DLL was loaded"); return; } // set the window title SetConsoleTitle(TEXT(title_text)); // set the console buffer size static const COORD bufferSize = { 80, 50 }; SetConsoleScreenBufferSize(hOut, bufferSize); // set the console window size static const SMALL_RECT windowSize = { 0, 0, 79, 49 }; SetConsoleWindowInfo(hOut, TRUE, &windowSize); // clear the window Clear(hOut); // hide the cursor static const CONSOLE_CURSOR_INFO cursorInfo = { 100, FALSE }; SetConsoleCursorInfo(hOut, &cursorInfo); // set input mode SetConsoleMode(hIn, 0); // 10ms update period const DWORD STREAM_UPDATE_PERIOD = 10; BASS_SetConfig(BASS_CONFIG_UPDATEPERIOD, STREAM_UPDATE_PERIOD); // initialize BASS sound library const DWORD STREAM_FREQUENCY = 48000; if (!BASS_Init(-1, STREAM_FREQUENCY, BASS_DEVICE_LATENCY, 0, NULL)) Error("Can't initialize device"); // get device info BASS_GetInfo(&info); // if the device's output rate is unknown default to stream frequency if (!info.freq) info.freq = STREAM_FREQUENCY; // debug print info DebugPrint("frequency: %d (min %d, max %d)\n", info.freq, info.minrate, info.maxrate); DebugPrint("device latency: %dms\n", info.latency); DebugPrint("device minbuf: %dms\n", info.minbuf); DebugPrint("ds version: %d (effects %s)\n", info.dsver, info.dsver < 8 ? "disabled" : "enabled"); // default buffer size = update period + 'minbuf' + 1ms extra margin BASS_SetConfig(BASS_CONFIG_BUFFER, STREAM_UPDATE_PERIOD + info.minbuf + 1); DebugPrint("using a %dms buffer\r", BASS_GetConfig(BASS_CONFIG_BUFFER)); // create a stream, stereo so that effects sound nice stream = BASS_StreamCreate(info.freq, 2, BASS_SAMPLE_FLOAT, (STREAMPROC*)WriteStream, 0); // set channel to apply effects fx_channel = stream; #ifdef BANDLIMITED_SAWTOOTH // initialize bandlimited sawtooth tables InitSawtooth(); #endif // initialize waves InitWave(); // enable the first oscillator osc_config[0].enable = true; // reset all controllers Control::ResetAll(); // start playing the audio stream BASS_ChannelPlay(stream, FALSE); // get the number of midi devices UINT midiInDevs = Midi::Input::GetNumDevices(); DebugPrint("MIDI input devices: %d\n", midiInDevs); // print device names for (UINT i = 0; i < midiInDevs; ++i) { MIDIINCAPS midiInCaps; if (Midi::Input::GetDeviceCaps(i, midiInCaps) == 0) { DebugPrint("%d: %s\n", i, midiInCaps.szPname); } } // if there are any devices available... if (midiInDevs > 0) { // open and start midi input // TO DO: select device number via a configuration setting Midi::Input::Open(0); Midi::Input::Start(); } // initialize to middle c note_most_recent = 60; voice_note[voice_most_recent] = unsigned char(note_most_recent); DisplaySpectrumAnalyzer displaySpectrumAnalyzer; DisplayKeyVolumeEnvelope displayKeyVolumeEnvelope; DisplayOscillatorWaveform displayOscillatorWaveform; DisplayOscillatorFrequency displayOscillatorFrequency; DisplayLowFrequencyOscillator displayLowFrequencyOscillator; DisplayFilterFrequency displayFilterFrequency; // initialize spectrum analyzer displaySpectrumAnalyzer.Init(stream, info); // initialize key display displayKeyVolumeEnvelope.Init(hOut); // show output scale and key octave PrintOutputScale(hOut); PrintKeyOctave(hOut); PrintGoToEffects(hOut); PrintAntialias(hOut); // show main page Menu::SetActivePage(hOut, Menu::PAGE_MAIN); while (running) { // if there are any pending input events... DWORD numEvents = 0; while (GetNumberOfConsoleInputEvents(hIn, &numEvents) && numEvents > 0) { // get the next input event INPUT_RECORD keyin; ReadConsoleInput(hIn, &keyin, 1, &numEvents); if (keyin.EventType == KEY_EVENT) { // handle interface keys if (keyin.Event.KeyEvent.bKeyDown) { WORD code = keyin.Event.KeyEvent.wVirtualKeyCode; DWORD modifiers = keyin.Event.KeyEvent.dwControlKeyState; if (code == VK_ESCAPE) { running = 0; break; } else if (code == VK_OEM_MINUS || code == VK_SUBTRACT) { Menu::UpdatePercentageProperty(output_scale, -1, modifiers, 0, 4); PrintOutputScale(hOut); } else if (code == VK_OEM_PLUS || code == VK_ADD) { Menu::UpdatePercentageProperty(output_scale, +1, modifiers, 0, 4); PrintOutputScale(hOut); } else if (code == VK_OEM_4) // '[' { if (keyboard_octave > 1) { for (int k = 0; k < KEYS; ++k) { if (key_down[k]) NoteOff(k + keyboard_octave * 12); } --keyboard_octave; for (int k = 0; k < KEYS; ++k) { if (key_down[k]) NoteOn(k + keyboard_octave * 12); } PrintKeyOctave(hOut); } } else if (code == VK_OEM_6) // ']' { if (keyboard_octave < 9) { for (int k = 0; k < KEYS; ++k) { if (key_down[k]) NoteOff(k + keyboard_octave * 12); } ++keyboard_octave; for (int k = 0; k < KEYS; ++k) { if (key_down[k]) NoteOn(k + keyboard_octave * 12); } PrintKeyOctave(hOut); } } else if (code == VK_F12) { use_antialias = !use_antialias; PrintAntialias(hOut); } else if (code >= VK_F1 && code < VK_F10) { Menu::SetActiveMenu(hOut, code - VK_F1); } else if (code == VK_F10) { PrintGoToEffects(hOut); Menu::SetActivePage(hOut, Menu::PAGE_MAIN); } else if (code == VK_F11) { PrintGoToMain(hOut); Menu::SetActivePage(hOut, Menu::PAGE_FX); } else if (code == VK_TAB) { if (modifiers & SHIFT_PRESSED) Menu::PrevMenu(hOut); else Menu::NextMenu(hOut); } else if (code == VK_UP || code == VK_DOWN || code == VK_RIGHT || code == VK_LEFT) { Menu::Handler(hOut, code, modifiers); } } // handle note keys for (int k = 0; k < KEYS; k++) { if (keyin.Event.KeyEvent.wVirtualKeyCode == keys[k]) { // key down bool down = (keyin.Event.KeyEvent.bKeyDown != 0); // if key down state changed... if (key_down[k] != down) { // update state key_down[k] = down; // if pressing the key if (down) { // note on NoteOn(k + keyboard_octave * 12); } else { // note off NoteOff(k + keyboard_octave * 12); } } break; } } } } // center frequency of the zeroth semitone band // (one octave down from the lowest key) float const freq_min = powf(2, float(keyboard_octave - 6)) * middle_c_frequency; // update the spectrum analyzer display displaySpectrumAnalyzer.Update(hOut, stream, info, freq_min); // update note key volume envelope display displayKeyVolumeEnvelope.Update(hOut); if (Menu::active_page == Menu::PAGE_MAIN) { // update the oscillator waveform display displayOscillatorWaveform.Update(hOut, info, voice_most_recent); // update the oscillator frequency displays for (int o = 0; o < NUM_OSCILLATORS; ++o) { if (osc_config[o].enable) displayOscillatorFrequency.Update(hOut, voice_most_recent, o); } // update the low-frequency oscillator display displayLowFrequencyOscillator.Update(hOut); // update the filter frequency display if (flt_config.enable) displayFilterFrequency.Update(hOut, voice_most_recent); } // show CPU usage PrintConsole(hOut, { 73, 49 }, "%6.2f%%", BASS_GetCPU()); // sleep for 1/60th of second Sleep(16); } if (midiInDevs) { // stop and close midi input Midi::Input::Stop(); Midi::Input::Close(); } // clean up spectrum analyzer displaySpectrumAnalyzer.Cleanup(stream); // clear the window Clear(hOut); BASS_Free(); }
int main(int argc, char* argv[]) { regex_t fregex[2]; gtk_init(&argc,&argv); // check the correct BASS was loaded if (HIWORD(BASS_GetVersion())!=BASSVERSION) { Error("An incorrect version of BASS was loaded"); return 0; } // Initialize the output device with 3D support if (!BASS_Init(-1,44100,BASS_DEVICE_3D,NULL,NULL)) { Error("Can't initialize device"); return 0; } { BASS_INFO i; BASS_GetInfo(&i); if (i.speakers>2) { GtkWidget *dialog=gtk_message_dialog_new(NULL,0, GTK_MESSAGE_QUESTION,GTK_BUTTONS_YES_NO,"Multiple speakers were detected. Would you like to use them?"); if (gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_NO) BASS_SetConfig(BASS_CONFIG_3DALGORITHM,BASS_3DALG_OFF); gtk_widget_destroy(dialog); } } // Use meters as distance unit, real world rolloff, real doppler effect BASS_Set3DFactors(1,1,1); // initialize GUI glade=glade_xml_new(GLADE_PATH"3dtest.glade",NULL,NULL); if (!glade) return 0; win=GetWidget("window1"); if (!win) return 0; glade_xml_signal_autoconnect(glade); g_signal_connect(gtk_tree_view_get_selection(GTK_TREE_VIEW(GetWidget("channels"))),"changed",G_CALLBACK(ListSelectionChange),NULL); { // setup list GtkTreeView *list=GTK_TREE_VIEW(GetWidget("channels")); GtkTreeViewColumn *col=gtk_tree_view_column_new(); gtk_tree_view_append_column(list,col); GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(col,renderer,TRUE); gtk_tree_view_column_add_attribute(col, renderer, "text", 0); GtkListStore *liststore=gtk_list_store_new(1,G_TYPE_STRING); gtk_tree_view_set_model(list,GTK_TREE_MODEL(liststore)); g_object_unref(liststore); } { // initialize file selector GtkFileFilter *filter; filesel=gtk_file_chooser_dialog_new("Open File",GTK_WINDOW(win),GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,GTK_STOCK_OPEN,GTK_RESPONSE_ACCEPT,NULL); filter=gtk_file_filter_new(); gtk_file_filter_set_name(filter,"Streamable files (wav/aif/mp3/mp2/mp1/ogg)"); regcomp(&fregex[0],"\\.(mp[1-3]|ogg|wav|aif)$",REG_ICASE|REG_NOSUB|REG_EXTENDED); gtk_file_filter_add_custom(filter,GTK_FILE_FILTER_FILENAME,FileExtensionFilter,&fregex[0],NULL); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(filesel),filter); filter=gtk_file_filter_new(); gtk_file_filter_set_name(filter,"MOD music files (mo3/xm/mod/s3m/it/mtm/umx)"); regcomp(&fregex[1],"\\.(mo3|xm|mod|s3m|it|umx)$",REG_ICASE|REG_NOSUB|REG_EXTENDED); gtk_file_filter_add_custom(filter,GTK_FILE_FILTER_FILENAME,FileExtensionFilter,&fregex[1],NULL); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(filesel),filter); filter=gtk_file_filter_new(); gtk_file_filter_set_name(filter,"All files"); gtk_file_filter_add_pattern(filter,"*"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(filesel),filter); } g_timeout_add(TIMERPERIOD,Update,NULL); UpdateButtons(); gtk_main(); gtk_widget_destroy(filesel); regfree(&fregex[0]); regfree(&fregex[1]); BASS_Free(); // close output return 0; }
void main(int argc, char **argv) { const char *fxname[9]={"CHORUS","COMPRESSOR","DISTORTION","ECHO", "FLANGER","GARGLE","I3DL2REVERB","PARAMEQ","REVERB"}; HFX fx[9]={0}; // effect handles INPUT_RECORD keyin; DWORD r,buflen; printf("BASS Simple Sinewave Synth\n" "--------------------------\n"); // check the correct BASS was loaded if (HIWORD(BASS_GetVersion())!=BASSVERSION) { printf("An incorrect version of BASS.DLL was loaded"); return; } // 10ms update period BASS_SetConfig(BASS_CONFIG_UPDATEPERIOD,10); // setup output - get latency if (!BASS_Init(-1,44100,BASS_DEVICE_LATENCY,0,NULL)) Error("Can't initialize device"); BASS_GetInfo(&info); // default buffer size = update period + 'minbuf' + 1ms extra margin BASS_SetConfig(BASS_CONFIG_BUFFER,10+info.minbuf+1); buflen=BASS_GetConfig(BASS_CONFIG_BUFFER); // if the device's output rate is unknown default to 44100 Hz if (!info.freq) info.freq=44100; // create a stream, stereo so that effects sound nice stream=BASS_StreamCreate(info.freq,2,0,(STREAMPROC*)WriteStream,0); printf("device latency: %dms\n",info.latency); printf("device minbuf: %dms\n",info.minbuf); printf("ds version: %d (effects %s)\n",info.dsver,info.dsver<8?"disabled":"enabled"); printf("press these keys to play:\n\n" " 2 3 5 6 7 9 0 =\n" " Q W ER T Y UI O P[ ]\n\n" "press -/+ to de/increase the buffer\n" "press spacebar to quit\n\n"); if (info.dsver>=8) // DX8 effects available printf("press F1-F9 to toggle effects\n\n"); printf("using a %dms buffer\r",buflen); BASS_ChannelPlay(stream,FALSE); while (ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE),&keyin,1,&r)) { int key; if (keyin.EventType!=KEY_EVENT) continue; if (keyin.Event.KeyEvent.wVirtualKeyCode==VK_SPACE) break; if (keyin.Event.KeyEvent.bKeyDown) { if (keyin.Event.KeyEvent.wVirtualKeyCode==VK_SUBTRACT || keyin.Event.KeyEvent.wVirtualKeyCode==VK_ADD) { // recreate stream with smaller/larger buffer BASS_StreamFree(stream); if (keyin.Event.KeyEvent.wVirtualKeyCode==VK_SUBTRACT) BASS_SetConfig(BASS_CONFIG_BUFFER,buflen-1); // smaller buffer else BASS_SetConfig(BASS_CONFIG_BUFFER,buflen+1); // larger buffer buflen=BASS_GetConfig(BASS_CONFIG_BUFFER); printf("using a %dms buffer\t\t\r",buflen); stream=BASS_StreamCreate(info.freq,2,0,(STREAMPROC*)WriteStream,0); // set effects on the new stream for (r=0;r<9;r++) if (fx[r]) fx[r]=BASS_ChannelSetFX(stream,BASS_FX_DX8_CHORUS+r,0); BASS_ChannelPlay(stream,FALSE); } if (keyin.Event.KeyEvent.wVirtualKeyCode>=VK_F1 && keyin.Event.KeyEvent.wVirtualKeyCode<=VK_F9) { r=keyin.Event.KeyEvent.wVirtualKeyCode-VK_F1; if (fx[r]) { BASS_ChannelRemoveFX(stream,fx[r]); fx[r]=0; printf("effect %s = OFF\t\t\r",fxname[r]); } else { // set the effect, not bothering with parameters (use defaults) if (fx[r]=BASS_ChannelSetFX(stream,BASS_FX_DX8_CHORUS+r,0)) printf("effect %s = ON\t\t\r",fxname[r]); } } } for (key=0;key<KEYS;key++) if (keyin.Event.KeyEvent.wVirtualKeyCode==keys[key]) { if (keyin.Event.KeyEvent.bKeyDown && vol[key]<MAXVOL) { pos[key]=0; vol[key]=MAXVOL+DECAY/2; // start key (setting "vol" slightly higher than MAXVOL to cover any rounding-down) } else if (!keyin.Event.KeyEvent.bKeyDown && vol[key]) vol[key]-=DECAY; // trigger key fadeout break; } } BASS_Free(); }
INT_PTR CALLBACK dialogproc(HWND h,UINT m,WPARAM w,LPARAM l) { switch (m) { case WM_COMMAND: switch (LOWORD(w)) { case IDCANCEL: DestroyWindow(h); break; case 10: { char file[MAX_PATH]=""; ofn.lpstrFilter="playable files\0*.mo3;*.xm;*.mod;*.s3m;*.it;*.mtm;*.umx;*.mp3;*.mp2;*.mp1;*.ogg;*.wav;*.aif\0All files\0*.*\0\0"; ofn.lpstrFile=file; if (GetOpenFileName(&ofn)) { // free both MOD and stream, it must be one of them! :) BASS_MusicFree(chan); BASS_StreamFree(chan); #if 1 // with FX flag if (!(chan=BASS_StreamCreateFile(FALSE,file,0,0,BASS_SAMPLE_LOOP|BASS_SAMPLE_FX)) && !(chan=BASS_MusicLoad(FALSE,file,0,0,BASS_SAMPLE_LOOP|BASS_MUSIC_RAMP|BASS_SAMPLE_FX,1))) { #else // without FX flag if (!(chan=BASS_StreamCreateFile(FALSE,file,0,0,BASS_SAMPLE_LOOP)) && !(chan=BASS_MusicLoad(FALSE,file,0,0,BASS_SAMPLE_LOOP|BASS_MUSIC_RAMP,1))) { #endif // whatever it is, it ain't playable MESS(10,WM_SETTEXT,0,"click here to open a file..."); Error("Can't play the file"); break; } MESS(10,WM_SETTEXT,0,file); { // setup the effects BASS_DX8_PARAMEQ p; fx[0]=BASS_ChannelSetFX(chan,BASS_FX_DX8_PARAMEQ,0); fx[1]=BASS_ChannelSetFX(chan,BASS_FX_DX8_PARAMEQ,0); fx[2]=BASS_ChannelSetFX(chan,BASS_FX_DX8_PARAMEQ,0); fx[3]=BASS_ChannelSetFX(chan,BASS_FX_DX8_REVERB,0); p.fGain=0; p.fBandwidth=18; p.fCenter=125; BASS_FXSetParameters(fx[0],&p); p.fCenter=1000; BASS_FXSetParameters(fx[1],&p); p.fCenter=8000; BASS_FXSetParameters(fx[2],&p); UpdateFX(0); UpdateFX(1); UpdateFX(2); UpdateFX(3); } BASS_ChannelPlay(chan,FALSE); } } break; } break; case WM_VSCROLL: if (l) { UpdateFX(GetDlgCtrlID((HWND)l)-20); } break; case WM_INITDIALOG: win=h; memset(&ofn,0,sizeof(ofn)); ofn.lStructSize=sizeof(ofn); ofn.hwndOwner=h; ofn.nMaxFile=MAX_PATH; ofn.Flags=OFN_HIDEREADONLY|OFN_EXPLORER; // setup output - default device if (!BASS_Init(-1,44100,0,win,NULL)) { Error("Can't initialize device"); DestroyWindow(win); break; } { // check that DX8 features are available BASS_INFO bi={sizeof(bi)}; BASS_GetInfo(&bi); if (bi.dsver<8) { BASS_Free(); Error("DirectX 8 is not installed"); DestroyWindow(win); } } // initialize eq/reverb sliders MESS(20,TBM_SETRANGE,FALSE,MAKELONG(0,20)); MESS(20,TBM_SETPOS,TRUE,10); MESS(21,TBM_SETRANGE,FALSE,MAKELONG(0,20)); MESS(21,TBM_SETPOS,TRUE,10); MESS(22,TBM_SETRANGE,FALSE,MAKELONG(0,20)); MESS(22,TBM_SETPOS,TRUE,10); MESS(23,TBM_SETRANGE,FALSE,MAKELONG(0,20)); MESS(23,TBM_SETPOS,TRUE,20); return 1; case WM_DESTROY: BASS_Free(); break; } return 0; } int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) { // check the correct BASS was loaded if (HIWORD(BASS_GetVersion())!=BASSVERSION) { MessageBox(0,"An incorrect version of BASS.DLL was loaded",0,MB_ICONERROR); return 0; } { // enable trackbar support INITCOMMONCONTROLSEX cc={sizeof(cc),ICC_BAR_CLASSES}; InitCommonControlsEx(&cc); } DialogBox(hInstance,(char*)1000,0,&dialogproc); return 0; }