diff --git a/README.TXT b/README.TXT index 14c9723..aa929ab 100644 --- a/README.TXT +++ b/README.TXT @@ -17,8 +17,7 @@ PREFIX = /usr or PREFIX = /usr/local -Copy the file asio.h from Steinberg's asio-sdk to -the wineasio directory +Copy the file asio.h from Steinberg's asio-sdk to the wineasio directory then execute: make and as root: make install @@ -26,27 +25,25 @@ and as root: make install then, again as normal user: regsvr32 wineasio.dll Notes: -The asio.c file uses 32 bit integer buffers, wich is supported by -most asio applications. The asio.c.float uses 32 bit float buffers and -thus avoids the format conversion necessary for jack. +The asio.c file uses 32 bit integer buffers, which is supported by most asio +applications. 2. USER INSTRUCTIONS -------------------- -The driver can be configured in two ways: either using environment variables -or using a configuration file. +The driver can be configured in two ways: either using environment variables or +using a configuration file. -The configuration file can be set per user in ".wineasiocfg". -As a fallback, a site file can be provided in "/etc/default/wineasiocfg" -if desired. +The configuration file can be set per user in ".wineasiocfg". As a fallback, a +site-wide file can be provided in "/etc/default/wineasiocfg" if desired. The format for the configuration file is simply "var=val". If using the shell, either include the assignment on the command line: ASIO_INPUTS=0 ~/bin/reaper.exe or ensure the variable has been exported: - EXPORT ASIO_INPUTS=0 + export ASIO_INPUTS=0 ~/bin/reaper.exe The available variables are as follows: @@ -58,31 +55,34 @@ ASIO_INPORT ASIO_OUTPORT -The last entry allows you to change the client name from the default, which -is constructed from the program name prefixed by "ASIO". For example, - ASIO_reaper.exe=REAPER +The last entry allows you to change the client name from the default, which is +constructed from the program name prefixed by "ASIO_". For example, + ASIO_reaper=REAPER All of the entries beginning ASIO_ can also have entries specific to a client, using the assigned client name. For example, + ASIO_reaper_INPUTS=0 +or (if the client name has been re-assigned as above), REAPER_INPUTS=0 INPUTS and OUTPUTS ------------------ -These let you limit the number of JACK ports allocated to this client. +These let you limit the number of JACK ports allocated to this client. The +default value for both is 2. INPORTNAME and OUTPORTNAME -------------------------- -These allow you to rename the input and output ports for the client. -The default names are "input_" and "output_". For example, +These allow you to rename the input and output ports for the client. The +default names are "input_" and "output_". For example, REAPER_OUTPORTNAME0=left REAPER_OUTPORTNAME1=right INPORT and OUTPORT ------------------ -These allow you to connect the client to JACK ports of your choice. -The default is to connect JACK's "hardware" inputs to your client's inputs -and your client's outputs to JACK's "hardware" outputs. You might be -running some other application, e.g. an icecast server, and want to -send output to that. For example, +These allow you to connect the client to JACK ports of your choice. The +default is to connect JACK's "hardware" inputs to your client's inputs and your +client's outputs to JACK's "hardware" outputs. You might be running some other +application, e.g. an icecast server, and want to send output to that. For +example, ASIO_OUTPORT0=idjc-mx:aux_lt ASIO_OUTPORT1=idjc-mx:aux_rt @@ -95,8 +95,8 @@ original code: Robert Reif posted to the wine mailinglist modified by: Ralf Beck (musical_snake@gmx.de) -port mapping, config file, dynamic client naming, bringing -back in line with Robert Reif's code +port mapping, config file, dynamic client naming, bringing back in line with +Robert Reif's code Peter L Jones (pljones@users.sf.net) fix for windows-style path handling: William Steidtmann @@ -107,6 +107,12 @@ todo: 4. CHANGE LOG ------------- +0.7.4: +08-APR-2008: Updates to the README.TXT (PLJ) +02-APR-2008: Move update to "toggle" to hopefully better place (PLJ) +24-MCH-2008: Don't trace in win32_callback. Set patch-level to 4. (PLJ) +09-JAN-2008: Nedko Arnaudov supplied a fix for Nuendo under WINE. + 0.7.3: 27-DEC-2007: Make slaving to jack transport work, correct port allocation bug. (RB) diff --git a/asio.c b/asio.c index 1794c3a..a172969 100644 --- a/asio.c +++ b/asio.c @@ -504,7 +504,7 @@ WRAP_THISCALL( void __stdcall, IWineASIOImpl_getDriverName, (LPWINEASIO iface, c WRAP_THISCALL( long __stdcall, IWineASIOImpl_getDriverVersion, (LPWINEASIO iface)) { TRACE("(%p)\n", iface); - return 70; // 0.7 (patch level 0) + return 74; // 0.7 (patch level 4) } WRAP_THISCALL( void __stdcall, IWineASIOImpl_getErrorMessage, (LPWINEASIO iface, char *string)) @@ -642,11 +642,34 @@ WRAP_THISCALL( ASIOError __stdcall, IWineASIOImpl_start, (LPWINEASIO iface)) WRAP_THISCALL( ASIOError __stdcall, IWineASIOImpl_stop, (LPWINEASIO iface)) { + int i; IWineASIOImpl * This = (IWineASIOImpl*)iface; TRACE("(%p)\n", iface); This->state = Exit; + for (i = 0; i < This->num_inputs; i++) { + if (This->input[i].port == NULL) { + TRACE("(%p) Not registered input port %i\n", This, i); + continue; + } + + if (jack_port_unregister(This->client, This->input[i].port)) { + TRACE("(%p) Unregistered input port %i: '%s' (%p)\n", This, i, This->input[i].port_name, This->input[i].port); + } + } + + for (i = 0; i < This->num_outputs; i++) { + if (This->output[i].port == NULL) { + TRACE("(%p) Not registered output port %i\n", This, i); + continue; + } + + if (jack_port_unregister(This->client, This->output[i].port)) { + TRACE("(%p) Unregistered output port %i: '%s' (%p)\n", This, i, This->output[i].port_name, This->output[i].port); + } + } + if (jack_deactivate(This->client)) { WARN("couldn't deactivate client\n"); @@ -1113,7 +1136,6 @@ static int jack_process(jack_nframes_t nframes, void * arg) if (This->client_state == Init) This->client_state = Run; - This->toggle = This->toggle ? 0 : 1; This->sample_position = transport.frame; /* get the input data from JACK and copy it to the ASIO buffers */ @@ -1152,6 +1174,8 @@ static int jack_process(jack_nframes_t nframes, void * arg) } } + This->toggle = This->toggle ? 0 : 1; + // This->callbacks->bufferSwitch(This->toggle, ASIOTrue); // } @@ -1166,7 +1190,7 @@ static DWORD CALLBACK win32_callback(LPVOID arg) { IWineASIOImpl * This = (IWineASIOImpl*)arg; struct sched_param attr; - TRACE("(%p)\n", arg); + //TRACE("(%p)\n", arg); attr.sched_priority = 86; sched_setscheduler(0, SCHED_FIFO, &attr);