Icefall писал(а):
WingLion писал(а):
Народ, кто-нибудь делал такое?
Есть некий источник данных в формата "типа-WAV", и надо их постоянно проигрывать, параллельно с исполнением программы.
Говоря короче, надо "свою музыку в игрушке на Форте".
Если нужно играть именно музыку (xm, it, mp3, ogg...), а не отдельные звуки (т.е. не только wav) , советую юзать <a href="http://un4seen.com">BASS</a>.
Кстати, да. Я тут только что попробовал, -- всё очень просто. Скачиваем с этого адреса BASSMOD.DLL и переводим BASSMOD.INC на Forth:
Код:
\ BASSMOD 2.0 (c) 1999-2002 Ian Luck.
\ Please report bugs/suggestions/etc... to bassmod@un4seen.com
\ See the BASSMOD.CHM file for more complete documentation
\ Error codes returned by BASSMOD_GetErrorCode()
0 CONSTANT BASS_OK \ all is OK
1 CONSTANT BASS_ERROR_MEM \ memory error
2 CONSTANT BASS_ERROR_FILEOPEN \ can't open the file
3 CONSTANT BASS_ERROR_DRIVER \ can't find a free/valid driver
5 CONSTANT BASS_ERROR_HANDLE \ invalid handle
6 CONSTANT BASS_ERROR_FORMAT \ unsupported format
7 CONSTANT BASS_ERROR_POSITION \ invalid playback position
8 CONSTANT BASS_ERROR_INIT \ BASS_Init has not been successfully called
14 CONSTANT BASS_ERROR_ALREADY \ already initialized/loaded
19 CONSTANT BASS_ERROR_ILLTYPE \ an illegal type was specified
20 CONSTANT BASS_ERROR_ILLPARAM \ an illegal parameter was specified
23 CONSTANT BASS_ERROR_DEVICE \ illegal device number
24 CONSTANT BASS_ERROR_NOPLAY \ not playing
28 CONSTANT BASS_ERROR_NOMUSIC \ no MOD music has been loaded
30 CONSTANT BASS_ERROR_NOSYNC \ synchronizers have been disabled
37 CONSTANT BASS_ERROR_NOTAVAIL \ requested data is not available
38 CONSTANT BASS_ERROR_DECODE \ the channel is a "decoding channel"
41 CONSTANT BASS_ERROR_FILEFORM \ unsupported file format
-1 CONSTANT BASS_ERROR_UNKNOWN \ some other mystery error
\ Device setup flags
1 CONSTANT BASS_DEVICE_8BITS \ use 8 bit resolution, else 16 bit
2 CONSTANT BASS_DEVICE_MONO \ use mono, else stereo
16 CONSTANT BASS_DEVICE_NOSYNC \ disable synchronizers
1 CONSTANT BASS_MUSIC_RAMP \ normal ramping
2 CONSTANT BASS_MUSIC_RAMPS \ sensitive ramping
4 CONSTANT BASS_MUSIC_LOOP \ loop music
16 CONSTANT BASS_MUSIC_FT2MOD \ play .MOD as FastTracker 2 does
32 CONSTANT BASS_MUSIC_PT1MOD \ play .MOD as ProTracker 1 does
256 CONSTANT BASS_MUSIC_POSRESET \ stop all notes when moving position
512 CONSTANT BASS_MUSIC_SURROUND \ surround sound
1024 CONSTANT BASS_MUSIC_SURROUND2 \ surround sound (mode 2)
2048 CONSTANT BASS_MUSIC_STOPBACK \ stop the music on a backwards jump effect
8192 CONSTANT BASS_MUSIC_CALCLEN \ calculate playback length
16384 CONSTANT BASS_MUSIC_NONINTER \ non-interpolated mixing
400000 CONSTANT BASS_MUSIC_NOSAMPLE \ don't load the samples
80000000 CONSTANT BASS_UNICODE
0 CONSTANT BASS_SYNC_MUSICPOS
0 CONSTANT BASS_SYNC_POS
1 CONSTANT BASS_SYNC_MUSICINST
2 CONSTANT BASS_SYNC_END
3 CONSTANT BASS_SYNC_MUSICFX
80000000 CONSTANT BASS_SYNC_ONETIME \ FLAG: sync only once, else continuously
\ BASSMOD_ChannelIsActive return values
0 CONSTANT BASS_ACTIVE_STOPPED
1 CONSTANT BASS_ACTIVE_PLAYING
3 CONSTANT BASS_ACTIVE_PAUSED
\ prototypes
WINAPI: BASSMOD_GetVersion bassmod.dll \ PROTO
WINAPI: BASSMOD_ErrorGetCode bassmod.dll \ PROTO
WINAPI: BASSMOD_GetDeviceDescription bassmod.dll \ PROTO :DWORD
WINAPI: BASSMOD_Init bassmod.dll \ PROTO :DWORD,:DWORD,:DWORD
WINAPI: BASSMOD_Free bassmod.dll \ PROTO
WINAPI: BASSMOD_GetCPU bassmod.dll \ PROTO
WINAPI: BASSMOD_SetVolume bassmod.dll \ PROTO :DWORD
WINAPI: BASSMOD_GetVolume bassmod.dll \ PROTO
WINAPI: BASSMOD_MusicLoad bassmod.dll \ PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
WINAPI: BASSMOD_MusicFree bassmod.dll \ PROTO
WINAPI: BASSMOD_MusicGetName bassmod.dll \ PROTO
WINAPI: BASSMOD_MusicGetLength bassmod.dll \ PROTO :DWORD
WINAPI: BASSMOD_MusicPlay bassmod.dll \ PROTO
WINAPI: BASSMOD_MusicPlayEx bassmod.dll \ PROTO :DWORD,:DWORD,:DWORD
WINAPI: BASSMOD_MusicDecode bassmod.dll \ PROTO :DWORD,:DWORD
WINAPI: BASSMOD_MusicSetAmplify bassmod.dll \ PROTO :DWORD
WINAPI: BASSMOD_MusicSetPanSep bassmod.dll \ PROTO :DWORD
WINAPI: BASSMOD_MusicSetPositionScaler bassmod.dll \ PROTO :DWORD
WINAPI: BASSMOD_MusicSetVolume bassmod.dll \ PROTO :DWORD,:DWORD
WINAPI: BASSMOD_MusicGetVolume bassmod.dll \ PROTO :DWORD
WINAPI: BASSMOD_MusicIsActive bassmod.dll \ PROTO
WINAPI: BASSMOD_MusicStop bassmod.dll \ PROTO
WINAPI: BASSMOD_MusicPause bassmod.dll \ PROTO
WINAPI: BASSMOD_MusicSetPosition bassmod.dll \ PROTO :DWORD
WINAPI: BASSMOD_MusicGetPosition bassmod.dll \ PROTO
WINAPI: BASSMOD_MusicSetSync bassmod.dll \ PROTO :DWORD,:DWORD,:DWORD,:DWORD
WINAPI: BASSMOD_MusicRemoveSync bassmod.dll \ PROTO :DWORD
После чего пишем тестовый проигрыватель:
Код:
REQUIRE BASSMOD_Init bassmod.f
: TEST
0 44100 -1 BASSMOD_Init 0= IF ." Cannot initialize device" THEN
BASS_MUSIC_LOOP BASS_MUSIC_RAMPS BASS_MUSIC_SURROUND BASS_MUSIC_POSRESET OR OR OR 0 0 S" aftermid.mod" DROP FALSE BASSMOD_MusicLoad
BEGIN BASSMOD_MusicPlay DROP KEY? UNTIL
BASSMOD_Free
;
TEST BYE
Всё работает, музыка играется.
P.S. Правда, BASSMOD.DLL предназначен только для проигрывания трекерной музыки (форматы типа MOD, XM, S3M, etc.), если нужны именно WAV и MP3, то надо пользоваться BASS.DLL.