Solved

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

Posted on 1997-02-12
1
636 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

Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

Join & Write a Comment

In this article, I will show how to use the Ribbon IDs Tool Window to assign the built-in Office icons to a ribbon button.  This tool will help us to find the OfficeImageId that corresponds to our desired built-in Office icon. The tool is part of…
For most people, the WrapPanel seems like a magic when they switch from WinForms to WPF. Most of us will think that the code that is used to write a control like that would be difficult. However, most of the work is done by the WPF engine, and the W…
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…
This tutorial demonstrates a quick way of adding group price to multiple Magento products.

706 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