回 帖 发 新 帖 刷新版面

主题:BCB里如何选择linein/mic 录音?

目前我在网上找到下面code,但是录音后并没有声音,不知道什么原因。

//---------------------------------------------------------------------------

#include <vcl.h>
#include <vfw.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

HINSTANCE g_hInstance; 
HANDLE m_hMCIWnd; 
int deviceID; 

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    m_hMCIWnd=MCIWndCreate(Handle,g_hInstance,
        WS_CHILD | WS_OVERLAPPED | WS_CAPTION | WS_BORDER |
        MCIWNDF_RECORD | MCIWNDF_SHOWALL,
        NULL );
    if ( NULL==m_hMCIWnd )
    {
        MessageBox(Handle,"Error Creating MCIWnd Window!",NULL, MB_OK);
        return;
    }
    Button1->Enabled=true;
    Label1->Caption="---停止---";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
    if ( Button2->Enabled )
    Button2Click(NULL);
    MCIWndDestroy(m_hMCIWnd);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    //录音
    MCIWndNew(m_hMCIWnd, "waveaudio");

    MCI_WAVE_SET_PARMS set_parms;
    set_parms.wFormatTag = WAVE_FORMAT_PCM;
    set_parms.wBitsPerSample = 16;
    set_parms.nChannels = 1;
    set_parms.nBlockAlign = (set_parms.nChannels*set_parms.wBitsPerSample)/8;
    set_parms.nSamplesPerSec = 44100;
    set_parms.nAvgBytesPerSec = ((set_parms.wBitsPerSample) *
                set_parms.nChannels *
                set_parms.nSamplesPerSec)/8;

    deviceID=MCIWndGetDeviceID(m_hMCIWnd);
    int result = mciSendCommand( deviceID, MCI_SET,
    MCI_WAIT
    | MCI_WAVE_SET_FORMATTAG
    | MCI_WAVE_SET_BITSPERSAMPLE
    | MCI_WAVE_SET_CHANNELS
    | MCI_WAVE_SET_SAMPLESPERSEC
    | MCI_WAVE_SET_AVGBYTESPERSEC
    | MCI_WAVE_SET_BLOCKALIGN,
    (DWORD)(LPVOID)&set_parms); 
    if ( result )
    {
        char buffer[100];
        mciGetErrorString(result, buffer, sizeof(buffer));
        MessageBox( NULL, buffer, "MCI_WAVE_SET_1", MB_OK);
        return;
    }
    MCIWndRecord(m_hMCIWnd);

    Button1->Enabled=false;
    Button2->Enabled=true;
    Label1->Caption="录音中......";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    //停止录音
    MCIWndStop(m_hMCIWnd);
    // MCIWndSave(m_hMCIWnd,"test.wav");

    //----这3句话代替上面一句,否则文件名会变为乱码--------
    Mmsystem::MCI_SAVE_PARMS mciSP;
    mciSP.lpfilename ="sk.wav"; //保存的文件
    mciSendCommand(deviceID,MCI_SAVE,MCI_SAVE_FILE | MCI_WAIT,(DWORD)(LPVOID)&mciSP);
    //---------------------------------
    MCIWndClose(m_hMCIWnd);
    Button1->Enabled=true;
    Button2->Enabled=false;
    Label1->Caption="---停止---";
}
//---------------------------------------------------------------------------

回复列表 (共2个回复)

沙发

你好.我是全职网赚工作者.
如果你有时间有电脑.会打字.
想在网络上创业.请联系我..
项目绝对真实.详情QQ空间资料
加盟请联系 QQ909065437

板凳

这是一个互助的模式。
不推广人也有钱赚的。分A B两个网。
不推广的人在A网。推广的人 在B网。
B网推广的人帮助A网。
A网拿6000元出局。
B网就多了。
C易特元亨QQ919169870
奖励制度 
C易特更多资料C易特元亨QQ919169870
http://blog.sina.com.cn/cyite6
C易特奖励制度
http://blog.sina.com.cn/s/blog_6b2561440100l5r8.html

我来回复

您尚未登录,请登录后再回复。点此登录或注册