- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在学习 SDL 2.0 教程,因为自从我学习 1.2 后情况发生了很大变化。我现在有一个非常简单的程序,只有一个窗口类、一个应用程序类和一个纹理类。当我调试和编译我的程序时,我从我的扬声器中听到类似高音调的嗡嗡声。如果我从调试文件夹运行已编译的 .exe 文件,也会发生这种情况。
我不知道如何解决这个问题。因为它似乎只是我的程序,并且发生在 .exe 文件上,所以我怀疑这是 visual studio 的错。虽然我不是真正的大程序员,但这只是一种爱好,所以也许是。这对我的程序来说是良性的(到目前为止,因为它很小),但它很烦人。有人知道为什么我的扬声器开始发出噪音吗?
提前谢谢你。
我将在下面发布我的代码,但我没有对 SDL Audio API 做任何事情。
源文件
#include <Windows.h>
#include "KApp.h"
const int winW = 800;
const int winH = 600;
int main(int argc, char** argv ) {
KApp ThisApp;
ThisApp.Run( winW, winH);
return 0;
}
KApp.h
#ifndef __KAPP_H__
#define __KAPP_H__
#include <SDL.h>
#include <vector>
#include "Window.h"
#include "KTexture.h"
class KApp {
private:
enum States {
INIT = 0,
RUNNING,
PAUSED,
HALTED,
};
States GameState;
Window* MainWindow;
std::vector<KTexture*> Textures;
public:
KApp();
~KApp();
void Run(const int &,const int &);
void Handle(SDL_Event* Event);
void Update();
void Render();
void CleanUp();
};
#endif
KApp.cpp
#include "KApp.h"
KApp::KApp() {
GameState = INIT;
MainWindow = NULL;
if(SDL_Init(SDL_INIT_EVERYTHING) < 0 ) {
exit(0x1);
}
//SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
//SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
//SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
//SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
//SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
//SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32);
//SDL_GL_SetAttribute(SDL_GL_ACCUM_RED_SIZE, 8);
//SDL_GL_SetAttribute(SDL_GL_ACCUM_GREEN_SIZE, 8);
//SDL_GL_SetAttribute(SDL_GL_ACCUM_BLUE_SIZE, 8);
//SDL_GL_SetAttribute(SDL_GL_ACCUM_ALPHA_SIZE, 8);
//SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
//SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 2);
return;
}
KApp::~KApp() {
if( MainWindow != NULL ) {
delete MainWindow;
MainWindow = NULL;
}
for( std::vector<KTexture*>::iterator it = Textures.begin(); it != Textures.end(); it++ ) {
delete *it;
}
Textures.clear();
SDL_Quit();
return;
}
void KApp::Handle(SDL_Event* Event) {
if(Event->type == SDL_QUIT) {
GameState = HALTED;
}
}
void KApp::CleanUp() {
}
void KApp::Render() {
MainWindow->Render();
}
void KApp::Run(const int& w,const int& h) {
MainWindow = new Window(w,h,"KApp Main Window");
if(!MainWindow->Create()) {
exit(1);
}
Textures.push_back(new KTexture("E:/Pictures/BKG.bmp"));
Textures[0]->Optimize(MainWindow->Surface());
MainWindow->Blit(Textures[0]->Surface());
GameState = RUNNING;
SDL_Event Event;
while(GameState == RUNNING) {
while(SDL_PollEvent(&Event)) {
Handle(&Event);
}
Update();
Render();
}
CleanUp();
}
void KApp::Update() {}
KWindow.h
#ifndef __WINDOW_H__
#define __WINDOW_H__
#include <SDL.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <string>
class Window {
private:
int Width;
int Height;
std::string Title;
SDL_Window* WNDW;
SDL_Surface* SFC;
public:
Window() : Width(800),Height(600),Title("Window"),WNDW(NULL),SFC(NULL) {}
Window(int w, int h, std::string title) : Width(w),Height(h),Title(title),WNDW(NULL),SFC(NULL) {}
~Window() {
if(WNDW != NULL) {
SDL_DestroyWindow(WNDW);
WNDW = NULL;
}
}
bool Create() {
if( WNDW != NULL ) {
return true;
}
WNDW = SDL_CreateWindow( Title.c_str(), SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, Width, Height, SDL_WINDOW_SHOWN );
if( WNDW == NULL ) {
return false;
}
SFC = SDL_GetWindowSurface( WNDW );
SDL_FillRect ( SFC , NULL, SDL_MapRGB( SFC->format, 0x00, 0x00, 0x00 ) );
SDL_UpdateWindowSurface( WNDW );
//if((Surface = SDL_SetVideoMode(Width,Height,32, SDL_HWSURFACE | SDL_GL_DOUBLEBUFFER | SDL_OPENGL | SDL_RESIZABLE )) == NULL) {
// return false;
//}
/*
glClearColor(0, 0, 0, 0);
glClearDepth(1.0f);
glViewport(0, 0, Width, Height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, Width, Height, 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
glEnable (GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glLoadIdentity();
*/
return true;
}
void Clear() {
SDL_FillRect ( SFC , NULL, SDL_MapRGB( SFC->format, 0x00, 0x00, 0x00 ) );
SDL_UpdateWindowSurface( WNDW );
}
void Blit(SDL_Surface* Surf) {
SDL_BlitSurface(Surf, NULL, SFC, NULL);
}
void BlitScaled(SDL_Surface* Surf, int x, int y, int w, int h) {
SDL_Rect MyRectum;
MyRectum.x = x;
MyRectum.y = y;
MyRectum.w = w;
MyRectum.h = h;
SDL_BlitScaled(Surf, NULL, SFC, &MyRectum);
}
void Render() {
SDL_UpdateWindowSurface( WNDW );
}
SDL_Surface* Surface() {
return SFC;
}
};
#endif
KTexture.h
#ifndef __KTEXTURE_H__
#define __KTEXTURE_H__
#include <SDL.h>
#include <string>
class KTexture {
private:
SDL_Surface* Texture;
public:
KTexture() : Texture(NULL) {}
KTexture( std::string path ) : Texture(NULL) {
Load(path);
}
~KTexture() {
if( Texture != NULL ) {
SDL_FreeSurface(Texture);
Texture = NULL;
}
}
bool Load( std::string path ) {
Texture = SDL_LoadBMP( path.c_str() );
if(Texture == NULL) {
return false;
}
return true;
}
void Render() {
Render(0,0);
}
void Render(int x, int y) {
}
SDL_Surface* Surface() {
return Texture;
}
bool Optimize(SDL_Surface* For) {
SDL_Surface* nsurf = SDL_ConvertSurface( Texture, For->format, NULL);
if( nsurf == NULL) {
return false;
}
SDL_FreeSurface(Texture);
Texture = nsurf;
return true;
}
};
#endif
编辑 修复。将此添加到 KApp::Run() 函数
Uint32 Time = SDL_GetTicks();
GameState = RUNNING;
SDL_Event Event;
while(GameState == RUNNING) {
while(SDL_PollEvent(&Event)) {
Handle(&Event);
}
Update();
if( SDL_GetTicks() > Time + 300) {
Render();
Time = SDL_GetTicks();
}
else
{
SDL_Delay(1);
}
}
最佳答案
当您的应用程序以非常高的帧速率运行时,我已经看到了这种情况。尖锐的声音通常来自显卡。
尝试在代码中启用垂直同步或限制应用程序的帧率。
关于c++ - 构建和运行应用程序时出现奇怪的噪音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31215266/
我今天尝试使用噪声在处理中生成伪随机角度,但它没有像我希望的那样工作。 float xoff = 0; float inc = 0.01; void draw(){ float vx = cos(
我正在使用 OpenCV 和 Python 处理图像。我需要去除图像中的点/噪声。 我尝试了使点变小的膨胀,但是文本被损坏了。我还尝试了两次循环扩张和一次腐 eclipse 。但这并没有给出令人满意的
我需要使用我编写的 perlin 噪声程序在 Java 中生成 3D 行星(球体)的纹理。但问题是左侧和右侧需要相同,上下也必须相同,这样您才能将纹理放在球体上。 我无法将柏林噪声源放在这里,因为它太
我想构建一个 android 应用程序,它可以识别我的声音,将其转换为文本,并显示我刚刚说的 toast 。我可以通过使用一个按钮来为我启动语音识别器来做到这一点。但现在我想让它只根据我的声音工作。
嗨,我正在使用我发现的算法来生成柏林噪声。我想做的是用更少的曲线创建更锐利的边缘Picture 。 private static final double F2 = 0.5*(Math.sqr
我正在尝试用 C++ 编写一个程序来播放一个小的 .wav 文件。我已经按照 DirectX SDK 文档对其进行了编程,以在辅助静态缓冲区上编写和播放。它运行正常,除了在任何 .wav 文件播放结束
在这个 short video 中听我的问题. 现在我更详细地解释: 在那个视频中,我已经播放了(点击按钮)一个音频文件三次,连续两次,最后一次有一点停顿。第一次听起来像 radio 正在调谐,第二次
所以在过去的几个小时里,我一直在尝试用 Dart 制作一个简单的 Perlin 噪声发生器。为此,我决定在 this page 上使用二维生成的伪代码。 (很棒的阅读!) 这是我的 Dart 实现的样
我正在为 android 开发一个 OCR 应用程序(构建为 java 应用程序)。我想从相机捕获的图像中检测文本并进行预处理我正在使用 OpenCV,但我得到了一些额外的行,这些行被读取为文本,我采
我正在使用 Ruby on Rails 3.1.1 和 pg gem。 在我的 Gemfile.lock 中,这是我拥有的 pg (0.11.0) 我的日志中充满了如下所示的信息。我没有用 sqlit
我在 javascript 中创建了一个带有实时对话模块的应用程序。我正在使用 WebRTC 设置对等连接。信号和候选人似乎都工作正常。对等点不在同一个网络上。 在某些时候,音频开始向流中添加点击。质
我在基于 android 的 csipsimple 应用程序中使用了一个 PJSIP 库。除一个问题外,一切正常。当我打开扬声器时,通话中有很多回声/噪音,无法进行通话。可能是什么问题以及如何处理这个
当您按下 alt+几乎任何其他键时,它会发出 clang 。噪音说“你已经尝试做一些你做不到的事情” 我想在多个组合中使用 alt 键作为网络应用程序的键盘快捷键。 尽管在按下 alt+* 时有一些事
我的目标是创建一个 SDL 窗口,绘制不同的波形并播放该波的不确定声音。通过按下特定的键,可以修改波的幅度、频率或波形等参数。 问题在于,即使是绘制时看起来不错的简单正弦波,听起来也很嘈杂。我不明白为
我收到大量这样的消息,围绕着我故意不支持的 SSL 协议(protocol),例如SSLv3、TLS1.0 等 2020-02-06 13:08:30,600 ERROR [io.undertow.r
我有错误s的情况通常是从 3rd-party JS 发出的,例如 Chartbeat 等。我想捕获并丢弃/静音这些错误以及相关的噪音。 所有此类 3rd 方脚本都会执行以下操作: 创建 DOM 标签
我对新 ffmpeg 中的重采样结果感到困惑。我将 AAC 音频解码为 PCM,ffmpeg 显示音频信息为: Stream #0:0: Audio: aac, 44100 Hz, stereo, f
我是一名优秀的程序员,十分优秀!