简单的窗体抖动托管c++

新建一个项目,在窗体中添加一个按钮控件。然后加入代码。

所有代码如下:

namespace frmdd {

 using namespace System;
 using namespace System::ComponentModel;
 using namespace System::Collections;
 using namespace System::Windows::Forms;
 using namespace System::Data;
 using namespace System::Drawing;

 /// <summary>
 /// Form1 摘要
 ///
 /// 警告: 如果更改此类的名称,则需要更改
 ///          与此类所依赖的所有 .resx 文件关联的托管资源编译器工具的
 ///          “资源文件名”属性。否则,
 ///          设计器将不能与此窗体的关联
 ///          本地化资源正确交互。
 /// </summary>
 public ref class Form1 : public System::Windows::Forms::Form
 {
 public:
  Form1(void)
  {
   InitializeComponent();
   //
   //TODO: 在此处添加构造函数代码
   //
  }

 protected:
  /// <summary>
  /// 清理所有正在使用的资源。
  /// </summary>
  ~Form1()
  {
   if (components)
   {
    delete components;
   }
  }
 private: System::Windows::Forms::Button^  button1;
 private: System::Windows::Forms::TextBox^  textBox1;
 protected:

 private:
  /// <summary>
  /// 必需的设计器变量。
  /// </summary>
  System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
  /// <summary>
  /// 设计器支持所需的方法 - 不要
  /// 使用代码编辑器修改此方法的内容。
  /// </summary>
  void InitializeComponent(void)
  {
   this->button1 = (gcnew System::Windows::Forms::Button());
   this->textBox1 = (gcnew System::Windows::Forms::TextBox());
   this->SuspendLayout();
   //
   // button1
   //
   this->button1->Location = System::Drawing::Point(151, 191);
   this->button1->Name = L"button1";
   this->button1->Size = System::Drawing::Size(75, 23);
   this->button1->TabIndex = 0;
   this->button1->Text = L"button1";
   this->button1->UseVisualStyleBackColor = true;
   this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
   //
   // textBox1
   //
   this->textBox1->Location = System::Drawing::Point(78, 92);
   this->textBox1->Name = L"textBox1";
   this->textBox1->Size = System::Drawing::Size(100, 21);
   this->textBox1->TabIndex = 1;
   //
   // Form1
   //
   this->AutoScaleDimensions = System::Drawing::SizeF(6, 12);
   this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
   this->ClientSize = System::Drawing::Size(292, 266);
   this->Controls->Add(this->textBox1);
   this->Controls->Add(this->button1);
   this->Name = L"Form1";
   this->Text = L"Form1";
   this->ResumeLayout(false);
   this->PerformLayout();

  }
#pragma endregion
  
 private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
             int sc=(int)DateTime::Now.Ticks;
     Random ^ran=gcnew Random(sc);
     this->textBox1->Text=sc.ToString();
            Point point =this->Location;
            for (int i = 0; i < 40; i++)
            {
                this->Location = Point(point.X + ran->Next(8) - 4, point.Y + ran->Next(8) - 4);
    System::Threading::Thread::Sleep(15);
                this->Location = point;
    System::Threading::Thread::Sleep(15);
            }
    }
 };
}

 

主要写代码就是按钮按下的部分。供学习。

转载于:https://www.cnblogs.com/jinyuttt/archive/2010/06/28/1767013.html

抖动算法是一种在数字信号处理领域中常用于减小误差的算法。在音频领域中,抖动算法被广泛应用于数字音频信号的采样和转换过程中,以提高信号的质量。Steinberg抖动算法是一种经典的抖动算法,它使用了一些特定的技巧来优化抖动效果。以下是一个简单的C语言实现: ``` #include <stdlib.h> #include <time.h> #include <math.h> #define PI 3.14159265358979 double randf() { return (double)rand() / RAND_MAX; } double gauss() { double x1, x2, w; do { x1 = 2.0 * randf() - 1.0; x2 = 2.0 * randf() - 1.0; w = x1 * x1 + x2 * x2; } while (w >= 1.0 || w == 0.0); w = sqrt((-2.0 * log(w)) / w); return x1 * w; } void steinberg_dither(int *data, int length, double level) { srand(time(NULL)); double scale = pow(2.0, level - 1); for (int i = 0; i < length; i++) { double dither = gauss() * scale; double sum = data[i] + dither; int rounded = (int)sum; if (rounded < -32768) { rounded = -32768; } else if (rounded > 32767) { rounded = 32767; } data[i] = rounded; } } ``` 在上面的代码中,`randf`和`gauss`函数分别用来生成随机数和高斯分布的随机数。`steinberg_dither`函数是实现Steinberg抖动算法的核心部分。它使用高斯分布的随机数来生成抖动信号,然后将抖动信号加到原始音频信号上。最后,它将结果四舍五入到最近的整数,并限制结果在[-32768, 32767]之间。 该算法的实现可以根据具体的应用场景进行调整和优化。例如,可以使用更高阶的抖动算法来进一步减小误差。另外,可以根据具体的硬件限制和采样率来调整抖动信号的幅度和频率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值