zoukankan      html  css  js  c++  java
  • mmsplayer v2 windows C 之(mmsplayer_wave )

    #include "wdef.h"
    #include "mmsplayer_wave.h"
    #include <Windows.h>
    /*
    版权: Weiny Zhou
    联系方式: QQ514540005
    声明:未经允许不得擅自发布本代码的部分或全部。
    */
    typedef struct wAudio_wave 
    {
    	int sample;
    	int channel;
    	int bits;
    	int buffersize;
    	LPWAVEHDR lpWaveHdr;
    	unsigned char* buffer[2];
    	w_wave_callback callback;
    	void* pParam;
    	WAVEFORMATEX sFormat;
    	HWAVEOUT hWaveOut;
    }wAudio_wave;
    static inline void CALLBACK  w_wave_auido_Proc( HWAVEOUT hwo, UINT uMsg, DWORD dwInstance,  DWORD dwParam1, DWORD dwParam2 )
    {
    	WAVEHDR *wHdr;
    	wAudio_wave * pAudio =NULL;
    	switch (uMsg)
    	{
    	case WOM_OPEN:
    		
    		break;
    	case WOM_CLOSE:
    		
    		break;
    	case WOM_DONE:
    		{
    			LPWAVEHDR pWaveHeader = (LPWAVEHDR)dwParam1;
    			pAudio=(wAudio_wave*)dwInstance;
    			waveOutUnprepareHeader( hwo, pWaveHeader, sizeof(WAVEHDR));
    			pWaveHeader->dwBufferLength = pAudio->callback(pAudio->pParam,pWaveHeader->lpData,pAudio->buffersize);
    			waveOutPrepareHeader( hwo, pWaveHeader, sizeof(WAVEHDR));
    			waveOutWrite( hwo, pWaveHeader, sizeof(WAVEHDR) );
    		}
    		break;
    	default:
    		break;
    
    	}
    }
    wAudio w_wave_auido_open(int sample,int channel,int bits,int bytesper,int align,int bufsize,void* pParam,w_wave_callback func)
    {
    	wAudio_wave* pAudio=NULL;
    	WAVEOUTCAPS caps;
    	INTOFUNC();
    	if(waveOutGetDevCaps(WAVE_MAPPER,&caps,sizeof(WAVEOUTCAPS))){
    		WERROR_A("waveOutGetDevCaps error.");goto error_lab;
    	}
    	pAudio=WOS_MALLOC_(wAudio_wave,1);
    	if(!pAudio){
    		PRINTF_ERROR_VALUE(ERROR_NEWMEM);goto error_lab;
    	}
    	memset(pAudio,0,sizeof(wAudio_wave));
    	pAudio->sFormat.wFormatTag=1;
    	pAudio->sFormat.nChannels=pAudio->channel=channel;
    	pAudio->sFormat.nSamplesPerSec=pAudio->sample=sample;
    	pAudio->sFormat.wBitsPerSample=pAudio->bits=bits;
    	pAudio->sFormat.nAvgBytesPerSec=bytesper;
    	pAudio->sFormat.nBlockAlign=align;
    	pAudio->buffersize=bufsize;
    	pAudio->callback=func;
    	pAudio->pParam=pParam;
    	pAudio->sFormat.cbSize=sizeof(WAVEFORMATEX);
    	pAudio->buffer[0]=WOS_MALLOC_(unsigned char,pAudio->buffersize);
    	if(pAudio->channel==1)
    		pAudio->lpWaveHdr=WOS_MALLOC_(WAVEHDR,1);
    	else
    	{
    		pAudio->lpWaveHdr=WOS_MALLOC_(WAVEHDR,2);
    		pAudio->buffer[1]=WOS_MALLOC_(unsigned char,pAudio->buffersize);
    	}
    	
    	if(!pAudio||!pAudio->buffer[0]||(pAudio->channel==2&&!pAudio->buffer[1])){
    		PRINTF_ERROR_VALUE(ERROR_NEWMEM);w_wave_audio_close(pAudio);goto error_lab;
    	}
    	
    	if(waveOutOpen(&pAudio->hWaveOut,WAVE_MAPPER,&pAudio->sFormat,w_wave_auido_Proc,pAudio,CALLBACK_FUNCTION))
    	{
    		SAFE_FREE(pAudio);
    		WERROR_A("waveOutOpen error.");goto error_lab;
    	}
    	memset(pAudio->lpWaveHdr,0,sizeof(WAVEHDR));
    	pAudio->lpWaveHdr[0].lpData=pAudio->buffer[0];
    	pAudio->lpWaveHdr[0].dwFlags=0;
    	pAudio->lpWaveHdr[0].dwLoops==0;
    	pAudio->lpWaveHdr[0].dwBufferLength=func(pParam,pAudio->buffer[0],bufsize);
    	
    	if(pAudio->channel==2){
    		memset(pAudio->lpWaveHdr+1,0,sizeof(WAVEHDR));
    		pAudio->lpWaveHdr[1].dwFlags=0;
    		pAudio->lpWaveHdr[1].dwLoops=0;
    		pAudio->lpWaveHdr[1].lpData=pAudio->buffer[1];
    		pAudio->lpWaveHdr[1].dwBufferLength=func(pParam,pAudio->buffer[1],bufsize);
    		waveOutPrepareHeader(pAudio->hWaveOut, pAudio->lpWaveHdr, sizeof(WAVEHDR)); 
    		waveOutPrepareHeader(pAudio->hWaveOut, pAudio->lpWaveHdr+1, sizeof(WAVEHDR));
    
    		waveOutWrite(pAudio->hWaveOut, pAudio->lpWaveHdr, sizeof(WAVEHDR)); 
    		waveOutWrite(pAudio->hWaveOut, pAudio->lpWaveHdr+1, sizeof(WAVEHDR)); 
    	}
    	else if(pAudio->channel==1)
    	{
    		waveOutPrepareHeader(pAudio->hWaveOut, pAudio->lpWaveHdr, sizeof(WAVEHDR));
    		waveOutWrite(pAudio->hWaveOut, pAudio->lpWaveHdr, sizeof(WAVEHDR));
    	}
    error_lab:
    	EXITFUNC();
    	return pAudio;
    }
    int w_wave_audio_close(wAudio audio)
    {
    	int nResult=0;
    	wAudio_wave* pAudio=NULL;
    	INTOFUNC();
    	if(audio){
    		nResult=ERROR_INITPARAM;PRINTF_ERROR_VALUE(nResult);goto error_lab;}
    	pAudio=(wAudio_wave*)audio;
    	if(pAudio->channel==0)goto error_lab;
    	if(pAudio->hWaveOut)
    	{
    		waveOutReset(pAudio->hWaveOut);
    		waveOutPrepareHeader(pAudio->hWaveOut, &pAudio->lpWaveHdr, sizeof(WAVEHDR));  
    
    		if(pAudio->channel==2)
    			waveOutPrepareHeader(pAudio->hWaveOut, &pAudio->lpWaveHdr+1, sizeof(WAVEHDR)); 
    		waveOutClose(pAudio->hWaveOut);
    	}
    	SAFE_FREE(pAudio->lpWaveHdr);
    	SAFE_FREE(pAudio->buffer[0]);
    	SAFE_FREE(pAudio->buffer[1]);
    error_lab:
    	SAFE_FREE(pAudio);
    	EXITFUNC();
    	return nResult;
    }



    这是mmsplayer for windows 的声音接口,喜欢的拿去用。

    至于ios的前面已经上传过了。

    android的昨天也上传了。

    版权所有,禁止转载或发布本篇文章的部分或全部。

  • 相关阅读:
    模拟器 | 如何安装ENSP,附上最详细的步骤,含安装软件!
    《平凡的世界》孙少平给妹妹孙兰香的信
    Date类添加一个新的方法,用prototype
    jquery动画相关函数
    斐波那契数列 递归调用
    怎样才能升天?
    jquery tabs切换插件
    vmware桥接共享的问题
    C#,mysql 添加数据的问题
    一根神奇的网线
  • 原文地址:https://www.cnblogs.com/weinyzhou/p/2592464.html
Copyright © 2011-2022 走看看