求助,在win32或者mfc下实现录音功能

时间:2021-03-19 10:04:02
在下用的是vs2010上的c++,目前在win32里面测试

毕业设计里面要用到这样一个录音的模块
把对麦克风说的话录下来存到win32的资源文件里面

但是实在不知道怎么做能够录音,初步想法是调用win7自带的录音机。。。如果可以就在mfc界面上做一个录音的按钮就更好了。。。

求一下指导方向,应该怎么做。。。一头雾水不知道怎么做

7 个解决方案

#1


资源文件不是已经封装好的吗,一般录音文件都是以文件的形式存放到硬盘的,

#2


本帖最后由 VisualEleven 于 2014-03-10 10:08:57 编辑
首先你要拿到语音数据,得到语音数据后完全可以像操作txt文件一样操作数据!
语音开始的时候创建对应的文件
语音结束的时候将数据包打包装到容器里面
单独开启一个线程来处理录音
录音参考
下面是录音线程
void CTread::RecordVoiceLog()
{
while(1)
{
if ( !g_lsVoiceLog.empty() )
{
std::list<VoiceLog>::iterator it = g_lsVoiceLog.begin();
while(it != g_lsVoiceLog.end())
{
char buf[30];
memcpy(buf, it->m_pbuf, sizeof(it->m_pbuf));
WriteVoiceLog(it->m_csFilePath, it->m_pbuf);
g_lsVoiceLog.erase(it);
it = g_lsVoiceLog.begin();
}
}
Sleep(60);
}
}

#3


引用 1 楼 yifuzhiming 的回复:
资源文件不是已经封装好的吗,一般录音文件都是以文件的形式存放到硬盘的,
我知道是文件形式。。我就是问怎么弄成文件形式

#4


引用 2 楼 modyaj 的回复:
首先你要拿到语音数据,得到语音数据后完全可以像操作txt文件一样操作数据!
语音开始的时候创建对应的文件
语音结束的时候将数据包打包装到容器里面
单独开启一个线程来处理录音
录音参考
下面是录音线程
void CTread::RecordVoiceLog()
{
while(1)
{
if ( !g_lsVoiceLog.empty() )
{
std::list<VoiceLog>::iterator it = g_lsVoiceLog.begin();
while(it != g_lsVoiceLog.end())
{
char buf[30];
memcpy(buf, it->m_pbuf, sizeof(it->m_pbuf));
WriteVoiceLog(it->m_csFilePath, it->m_pbuf);
g_lsVoiceLog.erase(it);
it = g_lsVoiceLog.begin();
}
}
Sleep(60);
}
}



这是java代码吧???

#5


http://www.vckbase.com/index.php/wv/664
看看有没有帮助~

#6


引用 4 楼 cwl369747431 的回复:
Quote: 引用 2 楼 modyaj 的回复:

首先你要拿到语音数据,得到语音数据后完全可以像操作txt文件一样操作数据!
语音开始的时候创建对应的文件
语音结束的时候将数据包打包装到容器里面
单独开启一个线程来处理录音
录音参考
下面是录音线程
void CTread::RecordVoiceLog()
{
while(1)
{
if ( !g_lsVoiceLog.empty() )
{
std::list<VoiceLog>::iterator it = g_lsVoiceLog.begin();
while(it != g_lsVoiceLog.end())
{
char buf[30];
memcpy(buf, it->m_pbuf, sizeof(it->m_pbuf));
WriteVoiceLog(it->m_csFilePath, it->m_pbuf);
g_lsVoiceLog.erase(it);
it = g_lsVoiceLog.begin();
}
}
Sleep(60);
}
}



这是java代码吧???

没怎么玩过java 不知道java上会不会有 memcpy 之类的函数

#7


网上找VC实现的录音机代码很多

#1


资源文件不是已经封装好的吗,一般录音文件都是以文件的形式存放到硬盘的,

#2


本帖最后由 VisualEleven 于 2014-03-10 10:08:57 编辑
首先你要拿到语音数据,得到语音数据后完全可以像操作txt文件一样操作数据!
语音开始的时候创建对应的文件
语音结束的时候将数据包打包装到容器里面
单独开启一个线程来处理录音
录音参考
下面是录音线程
void CTread::RecordVoiceLog()
{
while(1)
{
if ( !g_lsVoiceLog.empty() )
{
std::list<VoiceLog>::iterator it = g_lsVoiceLog.begin();
while(it != g_lsVoiceLog.end())
{
char buf[30];
memcpy(buf, it->m_pbuf, sizeof(it->m_pbuf));
WriteVoiceLog(it->m_csFilePath, it->m_pbuf);
g_lsVoiceLog.erase(it);
it = g_lsVoiceLog.begin();
}
}
Sleep(60);
}
}

#3


引用 1 楼 yifuzhiming 的回复:
资源文件不是已经封装好的吗,一般录音文件都是以文件的形式存放到硬盘的,
我知道是文件形式。。我就是问怎么弄成文件形式

#4


引用 2 楼 modyaj 的回复:
首先你要拿到语音数据,得到语音数据后完全可以像操作txt文件一样操作数据!
语音开始的时候创建对应的文件
语音结束的时候将数据包打包装到容器里面
单独开启一个线程来处理录音
录音参考
下面是录音线程
void CTread::RecordVoiceLog()
{
while(1)
{
if ( !g_lsVoiceLog.empty() )
{
std::list<VoiceLog>::iterator it = g_lsVoiceLog.begin();
while(it != g_lsVoiceLog.end())
{
char buf[30];
memcpy(buf, it->m_pbuf, sizeof(it->m_pbuf));
WriteVoiceLog(it->m_csFilePath, it->m_pbuf);
g_lsVoiceLog.erase(it);
it = g_lsVoiceLog.begin();
}
}
Sleep(60);
}
}



这是java代码吧???

#5


http://www.vckbase.com/index.php/wv/664
看看有没有帮助~

#6


引用 4 楼 cwl369747431 的回复:
Quote: 引用 2 楼 modyaj 的回复:

首先你要拿到语音数据,得到语音数据后完全可以像操作txt文件一样操作数据!
语音开始的时候创建对应的文件
语音结束的时候将数据包打包装到容器里面
单独开启一个线程来处理录音
录音参考
下面是录音线程
void CTread::RecordVoiceLog()
{
while(1)
{
if ( !g_lsVoiceLog.empty() )
{
std::list<VoiceLog>::iterator it = g_lsVoiceLog.begin();
while(it != g_lsVoiceLog.end())
{
char buf[30];
memcpy(buf, it->m_pbuf, sizeof(it->m_pbuf));
WriteVoiceLog(it->m_csFilePath, it->m_pbuf);
g_lsVoiceLog.erase(it);
it = g_lsVoiceLog.begin();
}
}
Sleep(60);
}
}



这是java代码吧???

没怎么玩过java 不知道java上会不会有 memcpy 之类的函数

#7


网上找VC实现的录音机代码很多