Visual C++ .NET - Windows MediaPlayer

 
Vista:

Windows MediaPlayer

Publicado por lyn (1 intervención) el 15/02/2008 14:12:00
hola necesito incluir en mi app un modulo para grabar y reproducir voces,en el builder usaba un componente CMediaPlayer q hay pero en visual c++.net no tengo ni idea q clase debo usar...
por favor diganme como....??
sld
LyN
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Implementación de grabación y reproducción de audio usando Windows Multimedia (MME)

Publicado por Alejandro (265 intervenciones) el 02/02/2024 20:03:05
Lyn, para agregar funcionalidad de grabación y reproducción de audio en una aplicación de Visual C++ .NET, puedes utilizar las API de Windows Multimedia (MME) o utilizar bibliotecas externas que faciliten estas tareas. A continuación, te proporcionaré una guía básica utilizando las API de MME para grabación y reproducción de audio.

Grabación de audio con MME:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <windows.h>
#include <mmsystem.h>
 
#pragma comment(lib, "Winmm.lib")
 
void IniciarGrabacion() {
    // Definir la estructura WAVEFORMATEX para la grabación
    WAVEFORMATEX formato;
    formato.wFormatTag = WAVE_FORMAT_PCM;
    formato.nChannels = 1; // Mono
    formato.nSamplesPerSec = 44100; // Frecuencia de muestreo
    formato.nAvgBytesPerSec = formato.nSamplesPerSec * 2; // 16 bits por muestra
    formato.nBlockAlign = 2;
    formato.wBitsPerSample = 16;
 
    // Abrir el dispositivo de grabación
    HWAVEIN hWaveIn;
    waveInOpen(&hWaveIn, WAVE_MAPPER, &formato, 0, 0, CALLBACK_NULL);
 
    // Configurar el buffer de entrada
    const int bufferSize = 4096;
    char buffer[bufferSize];
    WAVEHDR waveHdr = { 0 };
    waveHdr.lpData = buffer;
    waveHdr.dwBufferLength = bufferSize;
 
    // Preparar el buffer para la grabación
    waveInPrepareHeader(hWaveIn, &waveHdr, sizeof(WAVEHDR));
 
    // Iniciar la grabación
    waveInAddBuffer(hWaveIn, &waveHdr, sizeof(WAVEHDR));
    waveInStart(hWaveIn);
 
    // Esperar hasta que se complete la grabación (puedes implementar un mecanismo de temporización o evento)
    Sleep(5000);
 
    // Detener y limpiar
    waveInStop(hWaveIn);
    waveInUnprepareHeader(hWaveIn, &waveHdr, sizeof(WAVEHDR));
    waveInClose(hWaveIn);
}
 
int main() {
    IniciarGrabacion();
 
    return 0;
}

Reproducción de audio con MME:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <windows.h>
#include <mmsystem.h>
 
#pragma comment(lib, "Winmm.lib")
 
void ReproducirAudio() {
    // Abrir el dispositivo de reproducción
    HWAVEOUT hWaveOut;
    waveOutOpen(&hWaveOut, WAVE_MAPPER, 0, 0, 0, CALLBACK_NULL);
 
    // Configurar la estructura WAVEHDR para la reproducción
    WAVEHDR waveHdr = { 0 };
 
    // Cargar el archivo de audio en el buffer (reemplazar con tus datos de audio)
    char* audioData = /*...*/;
 
    waveHdr.lpData = audioData;
    waveHdr.dwBufferLength = /*...*/; // Longitud de tus datos de audio
 
    // Preparar el buffer para la reproducción
    waveOutPrepareHeader(hWaveOut, &waveHdr, sizeof(WAVEHDR));
 
    // Iniciar la reproducción
    waveOutWrite(hWaveOut, &waveHdr, sizeof(WAVEHDR));
 
    // Esperar hasta que se complete la reproducción (puedes implementar un mecanismo de temporización o evento)
    Sleep(5000);
 
    // Detener y limpiar
    waveOutReset(hWaveOut);
    waveOutUnprepareHeader(hWaveOut, &waveHdr, sizeof(WAVEHDR));
    waveOutClose(hWaveOut);
}
 
int main() {
    ReproducirAudio();
 
    return 0;
}

Ten en cuenta que este código es solo un punto de partida y necesitarás adaptarlo según tus necesidades y la estructura de tu aplicación. Además, asegúrate de manejar correctamente la administración de memoria y los errores en una aplicación del mundo real.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar