I discovered it by running one simple game [1]:
[s2@katleriai Tetris]$ wine Tetris.exe err:wave:OSS_RawOpenDevice ioctl(/dev/dsp, SNDCTL_DSP_SETDUPLEX) failed (Input/output error) fixme:dsound:IDirectSoundImpl_SetCooperativeLevel level=DSSCL_PRIORITY not fully supported fixme:dmime:IDirectMusicPerformance8Impl_Init (iface = 0x402a0748, dmusic = 0x100506e4, dsound = 0x4026c288, hwnd = (nil)) err:dmloader:IDirectMusicLoaderImpl_IDirectMusicLoader_SetObject : couldn't parse descriptor
MessageBox the pops up and says: "Data files missing or corrupt. Please reinstall."
Querying the "dmloader" debug channel gives:
[s2@katleriai Tetris]$ WINEDEBUG=+dmloader wine Tetris.exe err:wave:OSS_RawOpenDevice ioctl(/dev/dsp, SNDCTL_DSP_SETDUPLEX) failed (Input/output error) fixme:dsound:IDirectSoundImpl_SetCooperativeLevel level=DSSCL_PRIORITY not fully supported fixme:dmime:IDirectMusicPerformance8Impl_Init (iface = 0x40260600, dmusic = 0x100506e4, dsound = 0x4026c298, hwnd = (nil)) trace:dmloader:DMLOADER_DllGetClassObject (CLSID_DirectMusicLoader, IID_IClassFactory, 0x4074f39c) trace:dmloader:DMUSIC_CreateDirectMusicLoaderCF (IID_IClassFactory, 0x4074f39c, (nil)) trace:dmloader:IDirectMusicLoaderCF_QueryInterface (0x40260918, IID_IClassFactory, 0x4074f39c) trace:dmloader:IDirectMusicLoaderCF_AddRef (0x40260918): AddRef from 0 trace:dmloader:IDirectMusicLoaderCF_CreateInstance (0x40260918, (nil), IID_IDirectMusicLoader, 0x100506f0) trace:dmloader:DMUSIC_CreateDirectMusicLoaderImpl (IID_IDirectMusicLoader, 0x100506f0, (nil)) trace:dmloader:DMUSIC_InitLoaderSettings : (0x40260938) trace:dmloader:IDirectMusicLoaderImpl_IDirectMusicLoader_SetObject (0x40260938, 0x4074f008): pDesc: DMUS_OBJECTDESC (0x4074f008): - dwSize = 0x00000350 - dwValidData = 0x00000033 ( DMUS_OBJ_OBJECT DMUS_OBJ_CLASS DMUS_OBJ_FILENAME DMUS_OBJ_FULLPATH ) - guidClass = CLSID_DirectMusicCollection - guidObject = {f17e8673-c3b4-11d1-870b-00600893b1bd} - wszFileName = L"c:\windows\system\drivers\gm.dls"
trace:dmloader:DMUSIC_CreateDirectMusicLoaderFileStream (0x4074e868) trace:dmloader:IDirectMusicLoaderFileStream_IStream_QueryInterface (0x40262250, IID_IStream, 0x4074e868) trace:dmloader:IDirectMusicLoaderFileStream_IStream_AddRef (0x40262250): AddRef from 0 trace:dmloader:IDirectMusicLoaderFileStream_Attach (0x40262250, L"c:\windows\system\drivers\gm.dls", 0x40260938) trace:dmloader:IDirectMusicLoaderFileStream_Detach (0x40262250) warn:dmloader:IDirectMusicLoaderFileStream_Attach : failed err:dmloader:IDirectMusicLoaderImpl_IDirectMusicLoader_SetObject : couldn't parse descriptor trace:dmloader:IDirectMusicLoaderImpl_IDirectMusicLoader_QueryInterface (0x40260938, IID_IDirectMusicLoader, 0x100506f0) trace:dmloader:IDirectMusicLoaderImpl_IDirectMusicLoader_AddRef (0x40260938): AddRef from 0 trace:dmloader:IDirectMusicLoaderCF_Release (0x40260918): ReleaseRef to 0 trace:dmloader:IDirectMusicLoaderImpl_IDirectMusicLoader_EnableCache (0x40260938, CLSID_DirectMusicSegment, 0) trace:dmloader:DMUSIC_GetLoaderSettings : (0x40260938, CLSID_DirectMusicSegment, (nil), 0x4074f3a4) trace:dmloader:DMUSIC_SetLoaderSettings : (0x40260938, CLSID_DirectMusicSegment, (nil), 0x4074f3c4)
I think FMOD tries to open the "General MIDI collection of DLS instruments" called GM.DLS and fails to do so as Wine doesn't have it. Any ideas on the legal way to install it onto the Wine system?
MS states [2] some stuff regarding GM.DLS collection:
You can use this collection with any DirectMusic Producer piece, and it is available on all DirectMusic playback systems.
The default GM.dls collection is available to all projects at all times, and you should not add it to the project tree.
The sounds in this DLS collection consist of the GM/GS Sound Set that are licensed from Roland Corporation and are the same as those used for Roland's Sound Canvas family of music synthesizers.
Important For more information about legal issues related to using the GM.dls., click the copyright link at the bottom of this page.
Does anyone knows or can explain the license MS mentions here? Am i allowed to copy the file from any web page or another place?
Or another point: would it be sane to expect the Wine devs to implement simplified/different version of this collection in the future? TIA.
[1] http://gamedev.kobra.ktu.lt/Downloads/TetrisMav/Tetris.zip [2] http://msdn.microsoft.com/library/shared/deeptree/asp/rightframe.asp?dtcfg=/...
Saulius Krasuckas wrote:
I discovered it by running one simple game [1]:
[s2@katleriai Tetris]$ wine Tetris.exe err:wave:OSS_RawOpenDevice ioctl(/dev/dsp, SNDCTL_DSP_SETDUPLEX) failed (Input/output error)
Your sound card doesn't support full duplex which is required for DirectSound hardware acceleration. Try in the [dsound] section of your config file: "HardwareAcceleration" = "Emulation" to use the wave api which doesn't require full duplex.
On Tue, 13 Jul 2004, Robert Reif wrote:
Saulius Krasuckas wrote:
I discovered it by running one simple game [1]:
[s2@katleriai Tetris]$ wine Tetris.exe err:wave:OSS_RawOpenDevice ioctl(/dev/dsp, SNDCTL_DSP_SETDUPLEX) failed (Input/output error)
Your sound card doesn't support full duplex which is required for DirectSound hardware acceleration. Try in the [dsound] section of your config file: "HardwareAcceleration" = "Emulation" to use the wave api which doesn't require full duplex.
Why does DirectSound need full-duplex? It doesn't seem like it should be needed for simple playback. In fact I said I would send a patch to change this ERR to a WARN and I guess this means I'm overdue...
Francois Gouget wrote:
Why does DirectSound need full-duplex? It doesn't seem like it should be needed for simple playback. In fact I said I would send a patch to change this ERR to a WARN and I guess this means I'm overdue...
According to the comment in the code, you need to mmap the memory R/W in linux for it to work. R/W permission implies full duplex the way the driver is currently written.
I have not tried different mmap permissions to see if the linux bug is real or still exists. It's weird to do it that way but it's a work around for a bug that may not be valid any more. Can the person that wrote the code comment?
On Wed, 14 Jul 2004, Robert Reif wrote:
Francois Gouget wrote:
Why does DirectSound need full-duplex? It doesn't seem like it should be needed for simple playback. In fact I said I would send a patch to change this ERR to a WARN and I guess this means I'm overdue...
According to the comment in the code, you need to mmap the memory R/W in linux for it to work. R/W permission implies full duplex the way the driver is currently written.
Hmm, the specs don't actually say that opening RDWR only works on full-duplex capable devices. They do however recommend not to do so unless you intend to use full-duplex. For instance on p26:
Open the device files using O_RDONLY or O_WRONLY flags whenever it is possible. The driver uses this information when making many optimizing decisinos. Use O_RDWR only when writing a program which is going to both record and play back digital audio.
Then again on p29:
Read write mode (O_RDWR) should be used only when necessary to record and play back at the same time (full duplex mode).
But note that it says 'should', not 'must' (if the distinction is actually significant here). Also opening RDWR is not enough to enable full-fuplex, you must then call SNDCTL_DSP_SETDUPLEX.
Anyway, this trace:
err:wave:OSS_RawOpenDevice ioctl(/dev/dsp, SNDCTL_DSP_SETDUPLEX) failed (Input/output error)
can only happen if open("/dev/dsp",O_RDWR) succeeded which, if the ioctl error means this device only supports half-duplex, would mean that the open can work on half-duplex devices. It might be a bug in this particular driver, or maybe the Linux OSS drivers allow O_RDWR on half-duplex precisely because it is needed for mmap (or just because they diverge from the 4Front OSS specs).
I have not tried different mmap permissions to see if the linux bug is real or still exists. It's weird to do it that way but it's a work around for a bug that may not be valid any more. Can the person that wrote the code comment?
Is it possible to mmap write-only memory? If not that may explain Linux's insistence on being able to read from the fd: since the mmap will let you read from the device you have to prove to the kernel that you have read permission on the device. The only way to do so is to open it O_RDONLY or O_RDWR.
I'm not saying it makes complete sense in this particular case, just searching for an explanation...
Hmm, the specs don't actually say that opening RDWR only works
Warning - basing this on the OSS API is probably a mistake. Although ALSA supports the OSS API, its also preferable to use the ALSA API for a variety of reasons, most of them related to interoperability with different audio interfaces and user configured I/O configurations.
Is it possible to mmap write-only memory? If not that may explain Linux's insistence on being able to read from the fd: since the mmap
Please do *NOT* use the OSS API for mmap access. It offers no chance to interpose a user-space library between the app code and the driver system, which means that the code will not work in situations where the user has requested use of a not-purely-hardware device.
--p
On Thu, 15 Jul 2004, Paul Davis wrote:
Hmm, the specs don't actually say that opening RDWR only works
Warning - basing this on the OSS API is probably a mistake. Although ALSA supports the OSS API, its also preferable to use the ALSA API for a variety of reasons, most of them related to interoperability with different audio interfaces and user configured I/O configurations.
I don't understand you. We are discussing a problem in the wineoss sound backend. This backend interfaces with the OSS API. Are you saying Wine's OSS backend should use Alsa???
If you want a native Alsa interface then use winealsa.drv.
I don't understand you. We are discussing a problem in the wineoss sound backend. This backend interfaces with the OSS API. Are you saying Wine's OSS backend should use Alsa???
OK, that wasn't clear from the initial context of the discussion. Sorry, I missed it. Ignore me then.
I think FMOD tries to open the "General MIDI collection of DLS instruments" called GM.DLS and fails to do so as Wine doesn't have it. Any ideas on the legal way to install it onto the Wine system?
Install native DirectX
Tom