Solved

Change from 16 bit to 32 bit implementation of waveInAddBuffer()

Posted on 1997-02-12
1
641 Views
Last Modified: 2013-12-04
Hello,

I've got a really strange problem porting a 16 bit wav record routine into a 32 bit application.

I'm using low level Wave functions to read from my soundblaster line input in order to store data into my program. Here is a sample of the code:

declarations:

 static HWAVEIN Wave = NULL;
 static HWAVEOUT WaveOut = NULL;
 PCMWAVEFORMAT Format;
 WAVEINCAPSA Caps;
 WAVEOUTCAPSA OutCaps;
 MMRESULT Error;
 unsigned int num;
 static WAVEHDR Header;
 static WAVEHDR Next;
 static HGLOBAL HBuffer;
 static HGLOBAL HNext_Buffer;
 static LPSTR Next_Buffer;
 static LPSTR Buffer;

code:

HNext_Buffer = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT,Granularity+10);
HBuffer = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, Granularity+10);
if ((HBuffer == NULL) | (HNext_Buffer == NULL))
      {
      MessageBox(hDlg,"Memory Allocation Error","Arghh",MB_OK);
      EndDialog(hDlg,FALSE);
      return FALSE;
      }
Buffer = (LPSTR) GlobalLock(HBuffer);
Next_Buffer = (LPSTR) GlobalLock(HNext_Buffer);

Error = waveInOpen(&Wave,0,&Format,hDlg,NULL,CALLBACK_WINDOW | WAVE_ALLOWSYNC);

Header.lpData = Buffer;
Header.dwBufferLength = Granularity;
Header.dwBytesRecorded = Granularity;
Header.dwUser = 0x42424242;
Header.dwFlags = WHDR_INQUEUE;
Header.dwLoops = 0;

Next.lpData = Next_Buffer;
Next.dwBufferLength = Granularity;
Next.dwBytesRecorded = Granularity;
Next.dwUser = 0x26011972;
Next.dwFlags = WHDR_INQUEUE;
Next.dwLoops = 0;

Error |= waveInPrepareHeader(Wave,&Header,sizeof(WAVEHDR));
Error |= waveInPrepareHeader(Wave,&Next,sizeof(WAVEHDR));

// everything works fine up to here

Error |= waveInAddBuffer(Wave,&Header,sizeof(WAVEHDR));

// Error returns 33 which is WAVE_ERR_BASE (32) + 1 <- device still playing !!!
//                                          I want it to be playing!!!!
// Wave has an incredible value of something like -20465865
// which seems odd for a simple handle

Error |= waveInAddBuffer(Wave,&Next,sizeof(WAVEHDR));
Error |= waveInStart(Wave);

This code worked perfectly fine in 16 bit mode (Borland C++ 4.0) and I'm trying to port it to 32 bit with EMX GNU C/C++ port and RSXNT WDK and also with BC4.0 32bit compilers for win32. They both failed.

for the EMX port, I've built a winmm.a library using 'makelib' from WINMM.DLL, and multimedia support seemed all right since function like sndPlaySoundA, waveInGetDevsCapsA and waveInOpen worked. Besides my callback window do receive the WIM_OPEN message, tending to prove that the wave device is working correctly.

That's fairly strange because everything else in my code works out just fine except this part!

Everything is done on a 486dx266 running win95 (08/95 release) 8 Mb ram + SoundBlaster 2.0 (8bit)

So if you've got a solution for that I'd be more than glad to hear from you.

Best regards,

Jean Yves
0
Comment
Question by:JYC
1 Comment
 

Accepted Solution

by:
mannfai earned 100 total points
ID: 1298462
Hi Jean,

I got this problem b4.  I suspect u are using an old Win95 Soundblaster driver.  U can download the new drivers at Creative's site (www.creativelabs.com) and then try out your code again.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

What my article will show is if you ever had to do processing to a listbox without being able to just select all the items in it. My software Visual Studio 2008 crystal report v11 My issue was I wanted to add crystal report to a form and show…
For a while now I'v been searching for a circular progress control, much like the one you get when first starting your Silverlight application. I found a couple that were written in WPF and there were a few written in Silverlight, but all appeared o…
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
As a trusted technology advisor to your customers you are likely getting the daily question of, ‘should I put this in the cloud?’ As customer demands for cloud services increases, companies will see a shift from traditional buying patterns to new…

864 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now