辛苦大家帮我看一个关于内存播放wav的问题

ga6840 ga6840 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
代码如下:



#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#include <windows.h>

struct wav_head
{
unsigned long wav_id;
unsigned int wav_size;
unsigned int type;
unsigned int fmt_id;
unsigned int fmt_size;
unsigned short format_tag;
unsigned short channels;
unsigned int sample_per_sec;
unsigned int avg_bytes_per_sec;
unsigned short block_align;
unsigned short bits_per_sample;
//unsigned short attach_info;
unsigned int data_id;
unsigned int date_size;
};

int main()
{
char *pbuf;
int i,len;
FILE *fp;

struct wav_head *test;
test=(struct wav_head *)malloc(sizeof(struct wav_head));
len=55552;
pbuf=(char *)malloc(55552);
fp=fopen("test2.wav","w");

test->wav_id=0x46464952; //RIFF
test->wav_size=len+44-8;
test->type=0x45564157; //WAVE

test->fmt_id=0x20746d66; //fmt
test->fmt_size=0x10;
test->format_tag=0x1;
test->channels=0x1;
test->sample_per_sec=0x3e80;
test->avg_bytes_per_sec=0x7d00;
test->block_align=0x2;
test->bits_per_sample=0x10;

test->data_id=0x61746164; //data
test->date_size=len;




for(i=0;i<len;i++)
{
//pbuf[i]=rand()%256;
pbuf[i]=i%256;
}
fwrite(test,sizeof(struct wav_head),1,fp);
fwrite(pbuf,sizeof(char),len,fp);

char* wavwav=new char[sizeof(struct wav_head)+55552];
memcpy(wavwav , (char*)test ,sizeof(wav_head));
memcpy(wavwav + sizeof(wav_head) ,(char*)pbuf,55552);

sndPlaySound(NULL,SND_MEMORY|SND_ASYNC);//stop the sound if there is a sound
sndPlaySound((const char *)&test,SND_MEMORY|SND_ASYNC);//return immediately


free(pbuf);
free(test);
fclose(fp);

while(1);
return 0;
}



包含有:kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib dxerr8.lib winmm.lib dsound.lib dxguid.lib

程序执行后 生成的wav可以播放 但

问题是:
我尝试想用sndPlaySound播放内存里的wav却没达到效果 ,没有任何声音播放 ,为什么?

谢谢各位!
...全文

相关推荐

wav格式文件的简单修复

大家经常由于录音过程中出现意外,导致辛辛苦苦录制的音频不能打开,这里提供了一个方法,当然还需要有一定的知识的。

陈Eric

VC++ MFC对话框程序嵌入WAV背景音乐的实操工程包(VS2008可直接编译运行)

一套开箱即用的Visual C++ MFC桌面应用工程,专注解决对话框界面中持续播放WAV格式背景音乐的实际需求。整个项目基于Windows原生API实现,主要采用PlaySound函数完成异步、循环、不阻塞UI的音频播放,也兼容MCI命令接口作为备选方案。工程已通过VS2008完整编译验证,包含.sln解决方案文件、.vcproj项目配置、资源脚本(.rc)、图标(.ico)、JPEG界面图片、HTML使用说明文档(Test.htm)以及可执行文件(Test.exe)。核心逻辑集中在TestDlg.cpp

「已注销」

100首歌声数据集解析:wav/midi/歌词/时长四件套与多模态对齐实践

在音频人工智能与音乐信息检索(MIR)领域,高质量带标注的歌声数据远比通用语音稀缺。歌声合成、音高估计等任务依赖wav、midi、歌词与时间戳的多模态对齐,而手工标注成本极高。一份包含100首歌曲、配齐wav原始音频、midi旋律标注、歌词文本和句级时长标注的数据集,能够大幅降低数据准备门槛。通过对齐校验、midi解析与时间戳清洗,可快速构建训练样本,支撑歌声合成、歌词识别、音高追踪等方向的研究与工程实践。本文梳理该数据集的格式、解析方法与常见坑,提供可直接落地的处理思路。

weixin_34204722

Voicemail Audioplayer for Gmail:trade_mark:-crx插件

语言:English在Gmail:trade_mark:和Google Apps:trade_mark:中播放附加的音频。用于语音信箱在浏览器中直接播放音频文件,而无需下载(例如,通过Gmail:tr

weixin_38604620

音频优化:比起压缩格式,加载方式才是那个真正吃掉你内存的坑

回到开头那句话:音频优化,大多数人都盯错了地方。压缩格式管"包里多大",加载类型管"内存里多大"——而移动端崩溃、内存报警,是运行时内存的事,属于加载类型的地盘,所以它才是更值得上心、也更容易踩坑的那个;三种加载类型里,最大的陷阱是——它按解压后的大小占内存,一首看着只有几 MB 的 BGM,进内存可能膨胀到几十 MB;长的(BGM)用 Streaming,短的(音效)用 Decompress On Load,让长短各归其位;顺手再抓和采样率两个小设置,能再省一截。

你一身傲骨怎能输
评论 3
收藏 已收藏
分享
返回顶部
ga6840
C++ 语言 65,214 成员 250,514 内容