在 PlaySound 中播放操纵的音量级别与SND_MEMORY
Play manipulated volume levels in PlaySound with SND_MEMORY
>我遇到了播放首先读取到 BYTE 数组中的 wav 文件并对其进行修改以降低其音量的问题。我为实现它而制作的片段取自各种网络资源。
但是,当我通过Visual Studio 2013社区运行该程序时,它运行良好。
但是当进入在发布 x64 模式下生成的可执行文件时,它会给出运行时错误,我听不到任何声音(使用 try-catch 也无法捕获)。
我希望我的可执行文件工作,但它只有在我注释掉行 --> p[i] = (__int8)((float)p[i] * fVolume); <-- ,实际上是在做操纵音量水平的工作。
我无法理解为什么exe不起作用,Visual Studio可以轻松地在发布x64模式下运行它。
正在操作的WAV文件:https://drive.google.com/file/d/1i3DACTJxRCQQqRKBK_XL4msuw5p__kXg/view?usp=sharing 我正在使用的函数调用:PlaySound_Volume("right_10.wav",0.235);
感谢您的关注!
void PlaySound_Volume(string fname, float fVolume = 1, bool async = false){
DWORD dwFileSize;
BYTE* pFileBytes;
ifstream f(fname, ios::binary);
f.seekg(0, ios::end);
int lim = f.tellg();
dwFileSize = lim;
pFileBytes = new BYTE[lim];
f.seekg(0, ios::beg);
f.read((char *)pFileBytes, lim);
f.close();
BYTE* pDataOffset = (pFileBytes + 40);
__int8 * p = (__int8 *)(pDataOffset + 8);
for (int i = 80 / sizeof(*p); i < dwFileSize / sizeof(*p); i++){
// COMMENT FOLLOWING LINE
p[i] = (__int8)((float)p[i] * fVolume);
}
if (async)
PlaySound((LPCSTR)pFileBytes, NULL, SND_MEMORY | SND_ASYNC);
else
PlaySound((LPCSTR)pFileBytes, NULL, SND_MEMORY);
}
由于p
是pFileBytes + 48
,因此不允许在dwFileSize - 48
或更高时取消引用p
。
或者,换句话说,pFileBytes
指向dwFileSize
个字节中的第一个,但p
指向dwFileSize - 48
个字节中的第一个。
调整循环边界。
相关文章:
- Python ctype 'c_char_p' Memory Leak
- 模式"allocate memory or use existing data"
- Win32 API - HWND "{unused = ???} Unable to read memory"错误
- "in-situ without memory allocation" 字符串的愚蠢实现意味着什么?
- C++ "Using Uninitialized Memory.. (variable name) "
- "Memory Fragmentation"这仍然是一个问题?
- 封送指向结构异常"cannot Read or Write protected memory"的指针数组的指针数组
- 向量数组"Cannot access memory at address"
- 什么是"Reading unbounded stream from standard input (Memory Management)"的例子
- 我在 C++ "out_of_range at memory location"有问题
- QML QQmlPropertyList - 包含的对象生存期和'memory rules'
- Java 本机访问代码错误:"Invalid memory access"
- 编写"anti-lack of memory"异常安全代码
- 什么__asm挥发性("pause" ::: "memory");男孩
- 将 Dr. Memory 与 Visual Studio 项目配合使用时出错:缺少应用程序所需的库
- 如何修复代码中的"Invalid memory reference"错误?
- 如何找到导致"malloc(): memory corruption: 0x00"的线
- UrlDownloadToFile to Memory
- 如何安全地实施"Using Uninitialized Memory For Fun And Profit"?
- 在标头中声明 sqlite::d atabase db( ":memory:" ) 会给出错误