Solved

Wav - Res File - How to play.

Posted on 1998-10-25
1
566 Views
Last Modified: 2012-05-04
Hi,

I placed a wav file into a res file using Visual C++ v5.
I gave it the ID 101
I also also placed 2 bitmap. ID 102 and 103 respectably.
I got the bitmaps out using this statement.
Set Picture1 = LoadResPicture(102, 0)
Set Picture2 = LoadResPicture(103, 0)

But when I tried to get the wav out:
Dim b() As Byte
b = LoadResData(101, 10)
It said that there was no 101 res.
But I know it's in there.

So can somebody show me, how to extract a wav from a res, and
then play it?

Thanks
0
Comment
Question by:BabyFace
1 Comment
 
LVL 1

Accepted Solution

by:
kacklehorn earned 100 total points
Comment Utility
This is taken directly from Q141505 on Microsofts Knowledge Base.

SUMMARY
=======

Visual Basic 4.0 introduces a new function called LoadResData, which can be
used to retrieve binary data from a resource (.res) file. The sample in
this document demonstrates how to create a resource file and use binary
data from it in all versions of Visual Basic 4.0.

MORE INFORMATION
================

The following code is a resource script that can be compile by using the 16
and 32-bit versions of Rc.exe.

///////////////////////////////////////////////////////////////////////
//////
   // Myres.rc - 16 & 32 bit script. This must be compiled into two .res
   // files using the 16 & 32 bit versions of RC.

///////////////////////////////////////////////////////////////////////
//////
   // Wave Resources - You must copy these files from your \Windows
   // directory to the directory where your .rc script resides.

   CHIMES                  WAVE    DISCARDABLE     "Chimes.wav"
   DING                    WAVE    DISCARDABLE     "Ding.wav"

Steps to Create a Resource File
-------------------------------

1. Save the above code in Notepad as Myres.rc in the directory where Rc.exe
   exists on your hard disk.

2. Copy Chimes.wav and Ding.wav from your Windows directory (or your
   \Windows\Media directory on Windows 95 or Windows 98) to the same
   directory where you saved Myres.rc.

3. At the command line, type "RC -r Myres.rc." If you want a 16-bit and 32-
   bit version of your resource file, then you will have to save two copies
   of your resource file as Myres32.rc and Myres16.rc, and compile each
   separately with the appropriate resource compiler.

Steps to Run the Sample Application
-----------------------------------

1. Create a new project and add a command button to Form1.

2. Add the following code to Form1:

'*********************************************************************

      ' Form1.frm - Calls PlayWaveRes to play a wave resource file.

'*********************************************************************

      Sub Command1_Click()
         PlayWaveRes "Chimes"
         PlayWaveRes "Ding"
      End Sub

3. Add your resource file to the project.

4. Type the following code in a new code module:

'*********************************************************************

      ' Baswave.bas - Plays a wave file from a resource using LoadResData.

'*********************************************************************

      Option Explicit
      #If Win32 Then
        Private Declare Function sndPlaySound Lib "winmm" Alias
"sndPlaySoundA" _
                            (lpszSoundName As Any, ByVal uFlags As
Long) As Long
      #Else
        Private Declare Function sndPlaySound Lib "MMSYSTEM" ( _
                           lpszSoundName As Any, ByVal uFlags%) As Integer
      #End If

'*********************************************************************

      '  Flag values for wFlags parameter.

'*********************************************************************

      Public Const SND_SYNC = &H0        ' Play synchronously (default)
      'Public Const SND_ASYNC = &H1       ' Play asynchronously (see
                                          ' note below!)
      Public Const SND_NODEFAULT = &H2   ' Don't use default sound
      Public Const SND_MEMORY = &H4      ' lpszSoundName points to a
                                         ' memory file.
      Public Const SND_LOOP = &H8        ' Loop the sound until next
                                         ' sndPlaySound.
      Public Const SND_NOSTOP = &H10     ' Don't stop any currently
                                         ' playing sound.

'*********************************************************************

      ' Plays a wave file from a resource.

'*********************************************************************

      Public Sub PlayWaveRes(vntResourceID As Variant, Optional vntFlags)
      '-----------------------------------------------------------------
      ' WARNING:  If you want to play sound files asynchronously in
      '           Win32, then you MUST change bytSound() from a local
      '           variable to a module-level or static variable. Doing
      '           this prevents your array from being destroyed before
      '           sndPlaySound is complete. If you fail to do this, you
      '           will pass an invalid memory pointer, which will cause
      '           a GPF in the Multimedia Control Interface (MCI).
      '-----------------------------------------------------------------
      Dim bytSound() As Byte ' Always store binary data in byte arrays!

      bytSound = LoadResData(vntResourceID, "WAVE")

      If IsMissing(vntFlags) Then
         vntFlags = SND_NODEFAULT Or SND_SYNC Or SND_MEMORY
      End If

      If (vntFlags And SND_MEMORY) = 0 Then
         vntFlags = vntFlags Or SND_MEMORY
      End If

      sndPlaySound bytSound(0), vntFlags
      End Sub

0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
Since upgrading to Office 2013 or higher installing the Smart Indenter addin will fail. This article will explain how to install it so it will work regardless of the Office version installed.
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…

744 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

18 Experts available now in Live!

Get 1:1 Help Now