Enregistrer le fichier wave à l'aide de waveInOpen
Je suis en train d'enregistrer le son à un .fichier wave à l'aide de waveInOpen et co (voir ici)
Voici mon code pour enregistrer sur une mémoire tampon et il semble fonctionner :
#include <Windows.h>
#include <MMSystem.h>
#include <iostream>
using namespace std;
int main(){
HWAVEIN microHandle;
WAVEHDR waveHeader;
const int NUMPTS = 22050 * 10; //10 seconds
int sampleRate = 22050;
short int waveIn[NUMPTS]; //'short int' is a 16-bit type; I request 16-bit samples below
//for 8-bit capture, you'd use 'unsigned char' or 'BYTE' 8-bit types
MMRESULT result = 0;
WAVEFORMATEX format;
format.wFormatTag=WAVE_FORMAT_PCM; //simple, uncompressed format
format.wBitsPerSample=8; // 16 for high quality, 8 for telephone-grade
format.nChannels=1; // 1=mono, 2=stereo
format.nSamplesPerSec=sampleRate; // 22050
format.nAvgBytesPerSec=format.nSamplesPerSec*format.nChannels*format.wBitsPerSample/8;
//= nSamplesPerSec * n.Channels * wBitsPerSample/8
format.nBlockAlign=format.nChannels*format.wBitsPerSample/8;
//= n.Channels * wBitsPerSample/8
format.cbSize=0;
result = waveInOpen(µHandle, WAVE_MAPPER, &format, 0L, 0L, WAVE_FORMAT_DIRECT);
if (result)
{
cout << "Fail step 1" << endl;
cout << result << endl;
Sleep(10000);
return 0;
}
//Set up and prepare header for input
waveHeader.lpData = (LPSTR)waveIn;
waveHeader.dwBufferLength = NUMPTS*2;
waveHeader.dwBytesRecorded=0;
waveHeader.dwUser = 0L;
waveHeader.dwFlags = 0L;
waveHeader.dwLoops = 0L;
waveInPrepareHeader(microHandle, &waveHeader, sizeof(WAVEHDR));
//Insert a wave input buffer
result = waveInAddBuffer(microHandle, &waveHeader, sizeof(WAVEHDR));
if (result)
{
cout << "Fail step 2" << endl;
cout << result << endl;
Sleep(10000);
return 0;
}
result = waveInStart(microHandle);
if (result)
{
cout << "Fail step 3" << endl;
cout << result << endl;
Sleep(10000);
return 0;
}
//Wait until finished recording
do {} while (waveInUnprepareHeader(microHandle, &waveHeader, sizeof(WAVEHDR))==WAVERR_STILLPLAYING);
waveInClose(microHandle);
return 0;
}
Mais je n'ai pas trouvé de fonction ou une explication sur comment l'enregistrer sur le disque
Dois-je enregistrer la structure WAVEFORMATEX ? ou existe-il d'autres choses à ajouter à la vague de fichier d'en-tête ?
La seule chose est que je dois utiliser des bibliothèques de windows, je ne peut pas installer un autre
Merci 🙂
OriginalL'auteur Czoo | 2012-07-30
Vous devez vous connecter pour publier un commentaire.
.WAV
fichiers contiennent non seulement des données brutes, mais également le format et les données supplémentaires, et en général, d'avoir RIFF structure.MSDN explique l'écriture dans un fichier par exemple ici: L'écriture d'un Fichier WAV.
En outre, en cours de Windows SDK
\Samples\multimedia\directshow\dmo\dmodemo\dsutil.*
fichiers ont mise en œuvre de semblablesCWaveFile
classe.OriginalL'auteur Roman R.